brintos

brintos / linux-shallow public Read only

0
0
Text · 97.3 KiB · d34f4e8 Raw
2733 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2//3// ALSA SoC Audio driver for CS47L85 codec4//5// Copyright (C) 2015-2019 Cirrus Logic, Inc. and6//                         Cirrus Logic International Semiconductor Ltd.7//8 9#include <linux/module.h>10#include <linux/moduleparam.h>11#include <linux/device.h>12#include <linux/delay.h>13#include <linux/init.h>14#include <linux/pm.h>15#include <linux/pm_runtime.h>16#include <linux/regmap.h>17#include <sound/core.h>18#include <sound/pcm.h>19#include <sound/pcm_params.h>20#include <sound/soc.h>21#include <sound/tlv.h>22 23#include <linux/irqchip/irq-madera.h>24#include <linux/mfd/madera/core.h>25#include <linux/mfd/madera/registers.h>26 27#include "madera.h"28#include "wm_adsp.h"29 30#define DRV_NAME "cs47l85-codec"31 32#define CS47L85_NUM_ADSP	733#define CS47L85_MONO_OUTPUTS	434 35struct cs47l85 {36	struct madera_priv core;37	struct madera_fll fll[3];38};39 40static const struct cs_dsp_region cs47l85_dsp1_regions[] = {41	{ .type = WMFW_ADSP2_PM, .base = 0x080000 },42	{ .type = WMFW_ADSP2_ZM, .base = 0x0e0000 },43	{ .type = WMFW_ADSP2_XM, .base = 0x0a0000 },44	{ .type = WMFW_ADSP2_YM, .base = 0x0c0000 },45};46 47static const struct cs_dsp_region cs47l85_dsp2_regions[] = {48	{ .type = WMFW_ADSP2_PM, .base = 0x100000 },49	{ .type = WMFW_ADSP2_ZM, .base = 0x160000 },50	{ .type = WMFW_ADSP2_XM, .base = 0x120000 },51	{ .type = WMFW_ADSP2_YM, .base = 0x140000 },52};53 54static const struct cs_dsp_region cs47l85_dsp3_regions[] = {55	{ .type = WMFW_ADSP2_PM, .base = 0x180000 },56	{ .type = WMFW_ADSP2_ZM, .base = 0x1e0000 },57	{ .type = WMFW_ADSP2_XM, .base = 0x1a0000 },58	{ .type = WMFW_ADSP2_YM, .base = 0x1c0000 },59};60 61static const struct cs_dsp_region cs47l85_dsp4_regions[] = {62	{ .type = WMFW_ADSP2_PM, .base = 0x200000 },63	{ .type = WMFW_ADSP2_ZM, .base = 0x260000 },64	{ .type = WMFW_ADSP2_XM, .base = 0x220000 },65	{ .type = WMFW_ADSP2_YM, .base = 0x240000 },66};67 68static const struct cs_dsp_region cs47l85_dsp5_regions[] = {69	{ .type = WMFW_ADSP2_PM, .base = 0x280000 },70	{ .type = WMFW_ADSP2_ZM, .base = 0x2e0000 },71	{ .type = WMFW_ADSP2_XM, .base = 0x2a0000 },72	{ .type = WMFW_ADSP2_YM, .base = 0x2c0000 },73};74 75static const struct cs_dsp_region cs47l85_dsp6_regions[] = {76	{ .type = WMFW_ADSP2_PM, .base = 0x300000 },77	{ .type = WMFW_ADSP2_ZM, .base = 0x360000 },78	{ .type = WMFW_ADSP2_XM, .base = 0x320000 },79	{ .type = WMFW_ADSP2_YM, .base = 0x340000 },80};81 82static const struct cs_dsp_region cs47l85_dsp7_regions[] = {83	{ .type = WMFW_ADSP2_PM, .base = 0x380000 },84	{ .type = WMFW_ADSP2_ZM, .base = 0x3e0000 },85	{ .type = WMFW_ADSP2_XM, .base = 0x3a0000 },86	{ .type = WMFW_ADSP2_YM, .base = 0x3c0000 },87};88 89static const struct cs_dsp_region *cs47l85_dsp_regions[] = {90	cs47l85_dsp1_regions,91	cs47l85_dsp2_regions,92	cs47l85_dsp3_regions,93	cs47l85_dsp4_regions,94	cs47l85_dsp5_regions,95	cs47l85_dsp6_regions,96	cs47l85_dsp7_regions,97};98 99static const unsigned int wm_adsp2_control_bases[] = {100	MADERA_DSP1_CONFIG_1,101	MADERA_DSP2_CONFIG_1,102	MADERA_DSP3_CONFIG_1,103	MADERA_DSP4_CONFIG_1,104	MADERA_DSP5_CONFIG_1,105	MADERA_DSP6_CONFIG_1,106	MADERA_DSP7_CONFIG_1,107};108 109static int cs47l85_adsp_power_ev(struct snd_soc_dapm_widget *w,110				 struct snd_kcontrol *kcontrol,111				 int event)112{113	struct snd_soc_component *component =114		snd_soc_dapm_to_component(w->dapm);115	struct cs47l85 *cs47l85 = snd_soc_component_get_drvdata(component);116	struct madera_priv *priv = &cs47l85->core;117	struct madera *madera = priv->madera;118	unsigned int freq;119	int ret;120 121	ret = regmap_read(madera->regmap, MADERA_DSP_CLOCK_1, &freq);122	if (ret != 0) {123		dev_err(madera->dev,124			"Failed to read MADERA_DSP_CLOCK_1: %d\n", ret);125		return ret;126	}127 128	freq &= MADERA_DSP_CLK_FREQ_LEGACY_MASK;129	freq >>= MADERA_DSP_CLK_FREQ_LEGACY_SHIFT;130 131	switch (event) {132	case SND_SOC_DAPM_PRE_PMU:133		ret = madera_set_adsp_clk(&cs47l85->core, w->shift, freq);134		if (ret)135			return ret;136		break;137	default:138		break;139	}140 141	return wm_adsp_early_event(w, kcontrol, event);142}143 144#define CS47L85_NG_SRC(name, base) \145	SOC_SINGLE(name " NG HPOUT1L Switch",  base,  0, 1, 0), \146	SOC_SINGLE(name " NG HPOUT1R Switch",  base,  1, 1, 0), \147	SOC_SINGLE(name " NG HPOUT2L Switch",  base,  2, 1, 0), \148	SOC_SINGLE(name " NG HPOUT2R Switch",  base,  3, 1, 0), \149	SOC_SINGLE(name " NG HPOUT3L Switch",  base,  4, 1, 0), \150	SOC_SINGLE(name " NG HPOUT3R Switch",  base,  5, 1, 0), \151	SOC_SINGLE(name " NG SPKOUTL Switch",  base,  6, 1, 0), \152	SOC_SINGLE(name " NG SPKOUTR Switch",  base,  7, 1, 0), \153	SOC_SINGLE(name " NG SPKDAT1L Switch", base,  8, 1, 0), \154	SOC_SINGLE(name " NG SPKDAT1R Switch", base,  9, 1, 0), \155	SOC_SINGLE(name " NG SPKDAT2L Switch", base, 10, 1, 0), \156	SOC_SINGLE(name " NG SPKDAT2R Switch", base, 11, 1, 0)157 158#define CS47L85_RXANC_INPUT_ROUTES(widget, name) \159	{ widget, NULL, name " NG Mux" }, \160	{ name " NG Internal", NULL, "RXANC NG Clock" }, \161	{ name " NG Internal", NULL, name " Channel" }, \162	{ name " NG External", NULL, "RXANC NG External Clock" }, \163	{ name " NG External", NULL, name " Channel" }, \164	{ name " NG Mux", "None", name " Channel" }, \165	{ name " NG Mux", "Internal", name " NG Internal" }, \166	{ name " NG Mux", "External", name " NG External" }, \167	{ name " Channel", "Left", name " Left Input" }, \168	{ name " Channel", "Combine", name " Left Input" }, \169	{ name " Channel", "Right", name " Right Input" }, \170	{ name " Channel", "Combine", name " Right Input" }, \171	{ name " Left Input", "IN1", "IN1L" }, \172	{ name " Right Input", "IN1", "IN1R" }, \173	{ name " Left Input", "IN2", "IN2L" }, \174	{ name " Right Input", "IN2", "IN2R" }, \175	{ name " Left Input", "IN3", "IN3L" }, \176	{ name " Right Input", "IN3", "IN3R" }, \177	{ name " Left Input", "IN4", "IN4L" }, \178	{ name " Right Input", "IN4", "IN4R" }, \179	{ name " Left Input", "IN5", "IN5L" }, \180	{ name " Right Input", "IN5", "IN5R" }, \181	{ name " Left Input", "IN6", "IN6L" }, \182	{ name " Right Input", "IN6", "IN6R" }183 184#define CS47L85_RXANC_OUTPUT_ROUTES(widget, name) \185	{ widget, NULL, name " ANC Source" }, \186	{ name " ANC Source", "RXANCL", "RXANCL" }, \187	{ name " ANC Source", "RXANCR", "RXANCR" }188 189static void cs47l85_hp_post_enable(struct snd_soc_dapm_widget *w)190{191	struct snd_soc_component *component =192		snd_soc_dapm_to_component(w->dapm);193	unsigned int val;194 195	switch (w->shift) {196	case MADERA_OUT1L_ENA_SHIFT:197	case MADERA_OUT1R_ENA_SHIFT:198		val = snd_soc_component_read(component, MADERA_OUTPUT_ENABLES_1);199		val &= (MADERA_OUT1L_ENA | MADERA_OUT1R_ENA);200 201		if (val != (MADERA_OUT1L_ENA | MADERA_OUT1R_ENA))202			break;203 204		snd_soc_component_update_bits(component,205					      MADERA_EDRE_HP_STEREO_CONTROL,206					      0x0001, 1);207		break;208	default:209		break;210	}211}212 213static void cs47l85_hp_post_disable(struct snd_soc_dapm_widget *w)214{215	struct snd_soc_component *component =216		snd_soc_dapm_to_component(w->dapm);217 218	switch (w->shift) {219	case MADERA_OUT1L_ENA_SHIFT:220		snd_soc_component_write(component, MADERA_DCS_HP1L_CONTROL,221					0x2006);222		break;223	case MADERA_OUT1R_ENA_SHIFT:224		snd_soc_component_write(component, MADERA_DCS_HP1R_CONTROL,225					0x2006);226		break;227	default:228		return;229	}230 231	/* Only get to here for OUT1L and OUT1R */232	snd_soc_component_update_bits(component,233				      MADERA_EDRE_HP_STEREO_CONTROL,234				      0x0001, 0);235}236 237static int cs47l85_hp_ev(struct snd_soc_dapm_widget *w,238			 struct snd_kcontrol *kcontrol, int event)239{240	int ret;241 242	switch (event) {243	case SND_SOC_DAPM_PRE_PMU:244	case SND_SOC_DAPM_PRE_PMD:245		return madera_hp_ev(w, kcontrol, event);246	case SND_SOC_DAPM_POST_PMU:247		ret = madera_hp_ev(w, kcontrol, event);248		if (ret < 0)249			return ret;250 251		cs47l85_hp_post_enable(w);252		return 0;253	case SND_SOC_DAPM_POST_PMD:254		ret = madera_hp_ev(w, kcontrol, event);255		cs47l85_hp_post_disable(w);256		return ret;257	default:258		return -EINVAL;259	}260}261 262static const struct snd_kcontrol_new cs47l85_snd_controls[] = {263SOC_ENUM("IN1 OSR", madera_in_dmic_osr[0]),264SOC_ENUM("IN2 OSR", madera_in_dmic_osr[1]),265SOC_ENUM("IN3 OSR", madera_in_dmic_osr[2]),266SOC_ENUM("IN4 OSR", madera_in_dmic_osr[3]),267SOC_ENUM("IN5 OSR", madera_in_dmic_osr[4]),268SOC_ENUM("IN6 OSR", madera_in_dmic_osr[5]),269 270SOC_SINGLE_RANGE_TLV("IN1L Volume", MADERA_IN1L_CONTROL,271		     MADERA_IN1L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),272SOC_SINGLE_RANGE_TLV("IN1R Volume", MADERA_IN1R_CONTROL,273		     MADERA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),274SOC_SINGLE_RANGE_TLV("IN2L Volume", MADERA_IN2L_CONTROL,275		     MADERA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),276SOC_SINGLE_RANGE_TLV("IN2R Volume", MADERA_IN2R_CONTROL,277		     MADERA_IN2R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),278SOC_SINGLE_RANGE_TLV("IN3L Volume", MADERA_IN3L_CONTROL,279		     MADERA_IN3L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),280SOC_SINGLE_RANGE_TLV("IN3R Volume", MADERA_IN3R_CONTROL,281		     MADERA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),282 283SOC_ENUM("IN HPF Cutoff Frequency", madera_in_hpf_cut_enum),284 285SOC_SINGLE("IN1L HPF Switch", MADERA_IN1L_CONTROL,286	   MADERA_IN1L_HPF_SHIFT, 1, 0),287SOC_SINGLE("IN1R HPF Switch", MADERA_IN1R_CONTROL,288	   MADERA_IN1R_HPF_SHIFT, 1, 0),289SOC_SINGLE("IN2L HPF Switch", MADERA_IN2L_CONTROL,290	   MADERA_IN2L_HPF_SHIFT, 1, 0),291SOC_SINGLE("IN2R HPF Switch", MADERA_IN2R_CONTROL,292	   MADERA_IN2R_HPF_SHIFT, 1, 0),293SOC_SINGLE("IN3L HPF Switch", MADERA_IN3L_CONTROL,294	   MADERA_IN3L_HPF_SHIFT, 1, 0),295SOC_SINGLE("IN3R HPF Switch", MADERA_IN3R_CONTROL,296	   MADERA_IN3R_HPF_SHIFT, 1, 0),297SOC_SINGLE("IN4L HPF Switch", MADERA_IN4L_CONTROL,298	   MADERA_IN4L_HPF_SHIFT, 1, 0),299SOC_SINGLE("IN4R HPF Switch", MADERA_IN4R_CONTROL,300	   MADERA_IN4R_HPF_SHIFT, 1, 0),301SOC_SINGLE("IN5L HPF Switch", MADERA_IN5L_CONTROL,302	   MADERA_IN5L_HPF_SHIFT, 1, 0),303SOC_SINGLE("IN5R HPF Switch", MADERA_IN5R_CONTROL,304	   MADERA_IN5R_HPF_SHIFT, 1, 0),305SOC_SINGLE("IN6L HPF Switch", MADERA_IN6L_CONTROL,306	   MADERA_IN6L_HPF_SHIFT, 1, 0),307SOC_SINGLE("IN6R HPF Switch", MADERA_IN6R_CONTROL,308	   MADERA_IN6R_HPF_SHIFT, 1, 0),309 310SOC_SINGLE_TLV("IN1L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1L,311	       MADERA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),312SOC_SINGLE_TLV("IN1R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1R,313	       MADERA_IN1R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),314SOC_SINGLE_TLV("IN2L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2L,315	       MADERA_IN2L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),316SOC_SINGLE_TLV("IN2R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2R,317	       MADERA_IN2R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),318SOC_SINGLE_TLV("IN3L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3L,319	       MADERA_IN3L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),320SOC_SINGLE_TLV("IN3R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3R,321	       MADERA_IN3R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),322SOC_SINGLE_TLV("IN4L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4L,323	       MADERA_IN4L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),324SOC_SINGLE_TLV("IN4R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4R,325	       MADERA_IN4R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),326SOC_SINGLE_TLV("IN5L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_5L,327	       MADERA_IN5L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),328SOC_SINGLE_TLV("IN5R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_5R,329	       MADERA_IN5R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),330SOC_SINGLE_TLV("IN6L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_6L,331	       MADERA_IN6L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),332SOC_SINGLE_TLV("IN6R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_6R,333	       MADERA_IN6R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),334 335SOC_ENUM("Input Ramp Up", madera_in_vi_ramp),336SOC_ENUM("Input Ramp Down", madera_in_vd_ramp),337 338SND_SOC_BYTES("RXANC Coefficients", MADERA_ANC_COEFF_START,339	      MADERA_ANC_COEFF_END - MADERA_ANC_COEFF_START + 1),340SND_SOC_BYTES("RXANCL Config", MADERA_FCL_FILTER_CONTROL, 1),341SND_SOC_BYTES("RXANCL Coefficients", MADERA_FCL_COEFF_START,342	      MADERA_FCL_COEFF_END - MADERA_FCL_COEFF_START + 1),343SND_SOC_BYTES("RXANCR Config", MADERA_FCR_FILTER_CONTROL, 1),344SND_SOC_BYTES("RXANCR Coefficients", MADERA_FCR_COEFF_START,345	      MADERA_FCR_COEFF_END - MADERA_FCR_COEFF_START + 1),346 347MADERA_MIXER_CONTROLS("EQ1", MADERA_EQ1MIX_INPUT_1_SOURCE),348MADERA_MIXER_CONTROLS("EQ2", MADERA_EQ2MIX_INPUT_1_SOURCE),349MADERA_MIXER_CONTROLS("EQ3", MADERA_EQ3MIX_INPUT_1_SOURCE),350MADERA_MIXER_CONTROLS("EQ4", MADERA_EQ4MIX_INPUT_1_SOURCE),351 352MADERA_EQ_CONTROL("EQ1 Coefficients", MADERA_EQ1_2),353SOC_SINGLE_TLV("EQ1 B1 Volume", MADERA_EQ1_1, MADERA_EQ1_B1_GAIN_SHIFT,354	       24, 0, madera_eq_tlv),355SOC_SINGLE_TLV("EQ1 B2 Volume", MADERA_EQ1_1, MADERA_EQ1_B2_GAIN_SHIFT,356	       24, 0, madera_eq_tlv),357SOC_SINGLE_TLV("EQ1 B3 Volume", MADERA_EQ1_1, MADERA_EQ1_B3_GAIN_SHIFT,358	       24, 0, madera_eq_tlv),359SOC_SINGLE_TLV("EQ1 B4 Volume", MADERA_EQ1_2, MADERA_EQ1_B4_GAIN_SHIFT,360	       24, 0, madera_eq_tlv),361SOC_SINGLE_TLV("EQ1 B5 Volume", MADERA_EQ1_2, MADERA_EQ1_B5_GAIN_SHIFT,362	       24, 0, madera_eq_tlv),363 364MADERA_EQ_CONTROL("EQ2 Coefficients", MADERA_EQ2_2),365SOC_SINGLE_TLV("EQ2 B1 Volume", MADERA_EQ2_1, MADERA_EQ2_B1_GAIN_SHIFT,366	       24, 0, madera_eq_tlv),367SOC_SINGLE_TLV("EQ2 B2 Volume", MADERA_EQ2_1, MADERA_EQ2_B2_GAIN_SHIFT,368	       24, 0, madera_eq_tlv),369SOC_SINGLE_TLV("EQ2 B3 Volume", MADERA_EQ2_1, MADERA_EQ2_B3_GAIN_SHIFT,370	       24, 0, madera_eq_tlv),371SOC_SINGLE_TLV("EQ2 B4 Volume", MADERA_EQ2_2, MADERA_EQ2_B4_GAIN_SHIFT,372	       24, 0, madera_eq_tlv),373SOC_SINGLE_TLV("EQ2 B5 Volume", MADERA_EQ2_2, MADERA_EQ2_B5_GAIN_SHIFT,374	       24, 0, madera_eq_tlv),375 376MADERA_EQ_CONTROL("EQ3 Coefficients", MADERA_EQ3_2),377SOC_SINGLE_TLV("EQ3 B1 Volume", MADERA_EQ3_1, MADERA_EQ3_B1_GAIN_SHIFT,378	       24, 0, madera_eq_tlv),379SOC_SINGLE_TLV("EQ3 B2 Volume", MADERA_EQ3_1, MADERA_EQ3_B2_GAIN_SHIFT,380	       24, 0, madera_eq_tlv),381SOC_SINGLE_TLV("EQ3 B3 Volume", MADERA_EQ3_1, MADERA_EQ3_B3_GAIN_SHIFT,382	       24, 0, madera_eq_tlv),383SOC_SINGLE_TLV("EQ3 B4 Volume", MADERA_EQ3_2, MADERA_EQ3_B4_GAIN_SHIFT,384	       24, 0, madera_eq_tlv),385SOC_SINGLE_TLV("EQ3 B5 Volume", MADERA_EQ3_2, MADERA_EQ3_B5_GAIN_SHIFT,386	       24, 0, madera_eq_tlv),387 388MADERA_EQ_CONTROL("EQ4 Coefficients", MADERA_EQ4_2),389SOC_SINGLE_TLV("EQ4 B1 Volume", MADERA_EQ4_1, MADERA_EQ4_B1_GAIN_SHIFT,390	       24, 0, madera_eq_tlv),391SOC_SINGLE_TLV("EQ4 B2 Volume", MADERA_EQ4_1, MADERA_EQ4_B2_GAIN_SHIFT,392	       24, 0, madera_eq_tlv),393SOC_SINGLE_TLV("EQ4 B3 Volume", MADERA_EQ4_1, MADERA_EQ4_B3_GAIN_SHIFT,394	       24, 0, madera_eq_tlv),395SOC_SINGLE_TLV("EQ4 B4 Volume", MADERA_EQ4_2, MADERA_EQ4_B4_GAIN_SHIFT,396	       24, 0, madera_eq_tlv),397SOC_SINGLE_TLV("EQ4 B5 Volume", MADERA_EQ4_2, MADERA_EQ4_B5_GAIN_SHIFT,398	       24, 0, madera_eq_tlv),399 400MADERA_MIXER_CONTROLS("DRC1L", MADERA_DRC1LMIX_INPUT_1_SOURCE),401MADERA_MIXER_CONTROLS("DRC1R", MADERA_DRC1RMIX_INPUT_1_SOURCE),402MADERA_MIXER_CONTROLS("DRC2L", MADERA_DRC2LMIX_INPUT_1_SOURCE),403MADERA_MIXER_CONTROLS("DRC2R", MADERA_DRC2RMIX_INPUT_1_SOURCE),404 405SND_SOC_BYTES_MASK("DRC1", MADERA_DRC1_CTRL1, 5,406		   MADERA_DRC1R_ENA | MADERA_DRC1L_ENA),407SND_SOC_BYTES_MASK("DRC2", MADERA_DRC2_CTRL1, 5,408		   MADERA_DRC2R_ENA | MADERA_DRC2L_ENA),409 410MADERA_MIXER_CONTROLS("LHPF1", MADERA_HPLP1MIX_INPUT_1_SOURCE),411MADERA_MIXER_CONTROLS("LHPF2", MADERA_HPLP2MIX_INPUT_1_SOURCE),412MADERA_MIXER_CONTROLS("LHPF3", MADERA_HPLP3MIX_INPUT_1_SOURCE),413MADERA_MIXER_CONTROLS("LHPF4", MADERA_HPLP4MIX_INPUT_1_SOURCE),414 415MADERA_LHPF_CONTROL("LHPF1 Coefficients", MADERA_HPLPF1_2),416MADERA_LHPF_CONTROL("LHPF2 Coefficients", MADERA_HPLPF2_2),417MADERA_LHPF_CONTROL("LHPF3 Coefficients", MADERA_HPLPF3_2),418MADERA_LHPF_CONTROL("LHPF4 Coefficients", MADERA_HPLPF4_2),419 420SOC_ENUM("LHPF1 Mode", madera_lhpf1_mode),421SOC_ENUM("LHPF2 Mode", madera_lhpf2_mode),422SOC_ENUM("LHPF3 Mode", madera_lhpf3_mode),423SOC_ENUM("LHPF4 Mode", madera_lhpf4_mode),424 425MADERA_RATE_ENUM("ISRC1 FSL", madera_isrc_fsl[0]),426MADERA_RATE_ENUM("ISRC2 FSL", madera_isrc_fsl[1]),427MADERA_RATE_ENUM("ISRC3 FSL", madera_isrc_fsl[2]),428MADERA_RATE_ENUM("ISRC4 FSL", madera_isrc_fsl[3]),429MADERA_RATE_ENUM("ISRC1 FSH", madera_isrc_fsh[0]),430MADERA_RATE_ENUM("ISRC2 FSH", madera_isrc_fsh[1]),431MADERA_RATE_ENUM("ISRC3 FSH", madera_isrc_fsh[2]),432MADERA_RATE_ENUM("ISRC4 FSH", madera_isrc_fsh[3]),433MADERA_RATE_ENUM("ASRC1 Rate 1", madera_asrc1_rate[0]),434MADERA_RATE_ENUM("ASRC1 Rate 2", madera_asrc1_rate[1]),435MADERA_RATE_ENUM("ASRC2 Rate 1", madera_asrc2_rate[0]),436MADERA_RATE_ENUM("ASRC2 Rate 2", madera_asrc2_rate[1]),437 438WM_ADSP2_PRELOAD_SWITCH("DSP1", 1),439WM_ADSP2_PRELOAD_SWITCH("DSP2", 2),440WM_ADSP2_PRELOAD_SWITCH("DSP3", 3),441WM_ADSP2_PRELOAD_SWITCH("DSP4", 4),442WM_ADSP2_PRELOAD_SWITCH("DSP5", 5),443WM_ADSP2_PRELOAD_SWITCH("DSP6", 6),444WM_ADSP2_PRELOAD_SWITCH("DSP7", 7),445 446MADERA_MIXER_CONTROLS("DSP1L", MADERA_DSP1LMIX_INPUT_1_SOURCE),447MADERA_MIXER_CONTROLS("DSP1R", MADERA_DSP1RMIX_INPUT_1_SOURCE),448MADERA_MIXER_CONTROLS("DSP2L", MADERA_DSP2LMIX_INPUT_1_SOURCE),449MADERA_MIXER_CONTROLS("DSP2R", MADERA_DSP2RMIX_INPUT_1_SOURCE),450MADERA_MIXER_CONTROLS("DSP3L", MADERA_DSP3LMIX_INPUT_1_SOURCE),451MADERA_MIXER_CONTROLS("DSP3R", MADERA_DSP3RMIX_INPUT_1_SOURCE),452MADERA_MIXER_CONTROLS("DSP4L", MADERA_DSP4LMIX_INPUT_1_SOURCE),453MADERA_MIXER_CONTROLS("DSP4R", MADERA_DSP4RMIX_INPUT_1_SOURCE),454MADERA_MIXER_CONTROLS("DSP5L", MADERA_DSP5LMIX_INPUT_1_SOURCE),455MADERA_MIXER_CONTROLS("DSP5R", MADERA_DSP5RMIX_INPUT_1_SOURCE),456MADERA_MIXER_CONTROLS("DSP6L", MADERA_DSP6LMIX_INPUT_1_SOURCE),457MADERA_MIXER_CONTROLS("DSP6R", MADERA_DSP6RMIX_INPUT_1_SOURCE),458MADERA_MIXER_CONTROLS("DSP7L", MADERA_DSP7LMIX_INPUT_1_SOURCE),459MADERA_MIXER_CONTROLS("DSP7R", MADERA_DSP7RMIX_INPUT_1_SOURCE),460 461SOC_SINGLE_TLV("Noise Generator Volume", MADERA_COMFORT_NOISE_GENERATOR,462	       MADERA_NOISE_GEN_GAIN_SHIFT, 0x16, 0, madera_noise_tlv),463 464MADERA_MIXER_CONTROLS("HPOUT1L", MADERA_OUT1LMIX_INPUT_1_SOURCE),465MADERA_MIXER_CONTROLS("HPOUT1R", MADERA_OUT1RMIX_INPUT_1_SOURCE),466MADERA_MIXER_CONTROLS("HPOUT2L", MADERA_OUT2LMIX_INPUT_1_SOURCE),467MADERA_MIXER_CONTROLS("HPOUT2R", MADERA_OUT2RMIX_INPUT_1_SOURCE),468MADERA_MIXER_CONTROLS("HPOUT3L", MADERA_OUT3LMIX_INPUT_1_SOURCE),469MADERA_MIXER_CONTROLS("HPOUT3R", MADERA_OUT3RMIX_INPUT_1_SOURCE),470MADERA_MIXER_CONTROLS("SPKOUTL", MADERA_OUT4LMIX_INPUT_1_SOURCE),471MADERA_MIXER_CONTROLS("SPKOUTR", MADERA_OUT4RMIX_INPUT_1_SOURCE),472MADERA_MIXER_CONTROLS("SPKDAT1L", MADERA_OUT5LMIX_INPUT_1_SOURCE),473MADERA_MIXER_CONTROLS("SPKDAT1R", MADERA_OUT5RMIX_INPUT_1_SOURCE),474MADERA_MIXER_CONTROLS("SPKDAT2L", MADERA_OUT6LMIX_INPUT_1_SOURCE),475MADERA_MIXER_CONTROLS("SPKDAT2R", MADERA_OUT6RMIX_INPUT_1_SOURCE),476 477SOC_SINGLE("HPOUT1 SC Protect Switch", MADERA_HP1_SHORT_CIRCUIT_CTRL,478	   MADERA_HP1_SC_ENA_SHIFT, 1, 0),479SOC_SINGLE("HPOUT2 SC Protect Switch", MADERA_HP2_SHORT_CIRCUIT_CTRL,480	   MADERA_HP2_SC_ENA_SHIFT, 1, 0),481SOC_SINGLE("HPOUT3 SC Protect Switch", MADERA_HP3_SHORT_CIRCUIT_CTRL,482	   MADERA_HP3_SC_ENA_SHIFT, 1, 0),483 484SOC_SINGLE("SPKDAT1 High Performance Switch", MADERA_OUTPUT_PATH_CONFIG_5L,485	   MADERA_OUT5_OSR_SHIFT, 1, 0),486SOC_SINGLE("SPKDAT2 High Performance Switch", MADERA_OUTPUT_PATH_CONFIG_6L,487	   MADERA_OUT6_OSR_SHIFT, 1, 0),488 489SOC_DOUBLE_R("HPOUT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_1L,490	     MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_MUTE_SHIFT, 1, 1),491SOC_DOUBLE_R("HPOUT2 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_2L,492	     MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_MUTE_SHIFT, 1, 1),493SOC_DOUBLE_R("HPOUT3 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_3L,494	     MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_MUTE_SHIFT, 1, 1),495SOC_DOUBLE_R("Speaker Digital Switch", MADERA_DAC_DIGITAL_VOLUME_4L,496	     MADERA_DAC_DIGITAL_VOLUME_4R, MADERA_OUT4L_MUTE_SHIFT, 1, 1),497SOC_DOUBLE_R("SPKDAT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_5L,498	     MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_MUTE_SHIFT, 1, 1),499SOC_DOUBLE_R("SPKDAT2 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_6L,500	     MADERA_DAC_DIGITAL_VOLUME_6R, MADERA_OUT6L_MUTE_SHIFT, 1, 1),501 502SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_1L,503		 MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_VOL_SHIFT,504		 0xbf, 0, madera_digital_tlv),505SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_2L,506		 MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_VOL_SHIFT,507		 0xbf, 0, madera_digital_tlv),508SOC_DOUBLE_R_TLV("HPOUT3 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_3L,509		 MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_VOL_SHIFT,510		 0xbf, 0, madera_digital_tlv),511SOC_DOUBLE_R_TLV("Speaker Digital Volume", MADERA_DAC_DIGITAL_VOLUME_4L,512		 MADERA_DAC_DIGITAL_VOLUME_4R, MADERA_OUT4L_VOL_SHIFT,513		 0xbf, 0, madera_digital_tlv),514SOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_5L,515		 MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_VOL_SHIFT,516		 0xbf, 0, madera_digital_tlv),517SOC_DOUBLE_R_TLV("SPKDAT2 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_6L,518		 MADERA_DAC_DIGITAL_VOLUME_6R, MADERA_OUT6L_VOL_SHIFT,519		 0xbf, 0, madera_digital_tlv),520 521SOC_DOUBLE("SPKDAT1 Switch", MADERA_PDM_SPK1_CTRL_1, MADERA_SPK1L_MUTE_SHIFT,522	   MADERA_SPK1R_MUTE_SHIFT, 1, 1),523SOC_DOUBLE("SPKDAT2 Switch", MADERA_PDM_SPK2_CTRL_1, MADERA_SPK2L_MUTE_SHIFT,524	   MADERA_SPK2R_MUTE_SHIFT, 1, 1),525 526SOC_ENUM("Output Ramp Up", madera_out_vi_ramp),527SOC_ENUM("Output Ramp Down", madera_out_vd_ramp),528 529SOC_SINGLE("Noise Gate Switch", MADERA_NOISE_GATE_CONTROL,530	   MADERA_NGATE_ENA_SHIFT, 1, 0),531SOC_SINGLE_TLV("Noise Gate Threshold Volume", MADERA_NOISE_GATE_CONTROL,532	       MADERA_NGATE_THR_SHIFT, 7, 1, madera_ng_tlv),533SOC_ENUM("Noise Gate Hold", madera_ng_hold),534 535CS47L85_NG_SRC("HPOUT1L", MADERA_NOISE_GATE_SELECT_1L),536CS47L85_NG_SRC("HPOUT1R", MADERA_NOISE_GATE_SELECT_1R),537CS47L85_NG_SRC("HPOUT2L", MADERA_NOISE_GATE_SELECT_2L),538CS47L85_NG_SRC("HPOUT2R", MADERA_NOISE_GATE_SELECT_2R),539CS47L85_NG_SRC("HPOUT3L", MADERA_NOISE_GATE_SELECT_3L),540CS47L85_NG_SRC("HPOUT3R", MADERA_NOISE_GATE_SELECT_3R),541CS47L85_NG_SRC("SPKOUTL", MADERA_NOISE_GATE_SELECT_4L),542CS47L85_NG_SRC("SPKOUTR", MADERA_NOISE_GATE_SELECT_4R),543CS47L85_NG_SRC("SPKDAT1L", MADERA_NOISE_GATE_SELECT_5L),544CS47L85_NG_SRC("SPKDAT1R", MADERA_NOISE_GATE_SELECT_5R),545CS47L85_NG_SRC("SPKDAT2L", MADERA_NOISE_GATE_SELECT_6L),546CS47L85_NG_SRC("SPKDAT2R", MADERA_NOISE_GATE_SELECT_6R),547 548MADERA_MIXER_CONTROLS("AIF1TX1", MADERA_AIF1TX1MIX_INPUT_1_SOURCE),549MADERA_MIXER_CONTROLS("AIF1TX2", MADERA_AIF1TX2MIX_INPUT_1_SOURCE),550MADERA_MIXER_CONTROLS("AIF1TX3", MADERA_AIF1TX3MIX_INPUT_1_SOURCE),551MADERA_MIXER_CONTROLS("AIF1TX4", MADERA_AIF1TX4MIX_INPUT_1_SOURCE),552MADERA_MIXER_CONTROLS("AIF1TX5", MADERA_AIF1TX5MIX_INPUT_1_SOURCE),553MADERA_MIXER_CONTROLS("AIF1TX6", MADERA_AIF1TX6MIX_INPUT_1_SOURCE),554MADERA_MIXER_CONTROLS("AIF1TX7", MADERA_AIF1TX7MIX_INPUT_1_SOURCE),555MADERA_MIXER_CONTROLS("AIF1TX8", MADERA_AIF1TX8MIX_INPUT_1_SOURCE),556 557MADERA_MIXER_CONTROLS("AIF2TX1", MADERA_AIF2TX1MIX_INPUT_1_SOURCE),558MADERA_MIXER_CONTROLS("AIF2TX2", MADERA_AIF2TX2MIX_INPUT_1_SOURCE),559MADERA_MIXER_CONTROLS("AIF2TX3", MADERA_AIF2TX3MIX_INPUT_1_SOURCE),560MADERA_MIXER_CONTROLS("AIF2TX4", MADERA_AIF2TX4MIX_INPUT_1_SOURCE),561MADERA_MIXER_CONTROLS("AIF2TX5", MADERA_AIF2TX5MIX_INPUT_1_SOURCE),562MADERA_MIXER_CONTROLS("AIF2TX6", MADERA_AIF2TX6MIX_INPUT_1_SOURCE),563MADERA_MIXER_CONTROLS("AIF2TX7", MADERA_AIF2TX7MIX_INPUT_1_SOURCE),564MADERA_MIXER_CONTROLS("AIF2TX8", MADERA_AIF2TX8MIX_INPUT_1_SOURCE),565 566MADERA_MIXER_CONTROLS("AIF3TX1", MADERA_AIF3TX1MIX_INPUT_1_SOURCE),567MADERA_MIXER_CONTROLS("AIF3TX2", MADERA_AIF3TX2MIX_INPUT_1_SOURCE),568 569MADERA_MIXER_CONTROLS("AIF4TX1", MADERA_AIF4TX1MIX_INPUT_1_SOURCE),570MADERA_MIXER_CONTROLS("AIF4TX2", MADERA_AIF4TX2MIX_INPUT_1_SOURCE),571 572MADERA_MIXER_CONTROLS("SLIMTX1", MADERA_SLIMTX1MIX_INPUT_1_SOURCE),573MADERA_MIXER_CONTROLS("SLIMTX2", MADERA_SLIMTX2MIX_INPUT_1_SOURCE),574MADERA_MIXER_CONTROLS("SLIMTX3", MADERA_SLIMTX3MIX_INPUT_1_SOURCE),575MADERA_MIXER_CONTROLS("SLIMTX4", MADERA_SLIMTX4MIX_INPUT_1_SOURCE),576MADERA_MIXER_CONTROLS("SLIMTX5", MADERA_SLIMTX5MIX_INPUT_1_SOURCE),577MADERA_MIXER_CONTROLS("SLIMTX6", MADERA_SLIMTX6MIX_INPUT_1_SOURCE),578MADERA_MIXER_CONTROLS("SLIMTX7", MADERA_SLIMTX7MIX_INPUT_1_SOURCE),579MADERA_MIXER_CONTROLS("SLIMTX8", MADERA_SLIMTX8MIX_INPUT_1_SOURCE),580 581MADERA_GAINMUX_CONTROLS("SPDIF1TX1", MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE),582MADERA_GAINMUX_CONTROLS("SPDIF1TX2", MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE),583 584WM_ADSP_FW_CONTROL("DSP1", 0),585WM_ADSP_FW_CONTROL("DSP2", 1),586WM_ADSP_FW_CONTROL("DSP3", 2),587WM_ADSP_FW_CONTROL("DSP4", 3),588WM_ADSP_FW_CONTROL("DSP5", 4),589WM_ADSP_FW_CONTROL("DSP6", 5),590WM_ADSP_FW_CONTROL("DSP7", 6),591};592 593MADERA_MIXER_ENUMS(EQ1, MADERA_EQ1MIX_INPUT_1_SOURCE);594MADERA_MIXER_ENUMS(EQ2, MADERA_EQ2MIX_INPUT_1_SOURCE);595MADERA_MIXER_ENUMS(EQ3, MADERA_EQ3MIX_INPUT_1_SOURCE);596MADERA_MIXER_ENUMS(EQ4, MADERA_EQ4MIX_INPUT_1_SOURCE);597 598MADERA_MIXER_ENUMS(DRC1L, MADERA_DRC1LMIX_INPUT_1_SOURCE);599MADERA_MIXER_ENUMS(DRC1R, MADERA_DRC1RMIX_INPUT_1_SOURCE);600MADERA_MIXER_ENUMS(DRC2L, MADERA_DRC2LMIX_INPUT_1_SOURCE);601MADERA_MIXER_ENUMS(DRC2R, MADERA_DRC2RMIX_INPUT_1_SOURCE);602 603MADERA_MIXER_ENUMS(LHPF1, MADERA_HPLP1MIX_INPUT_1_SOURCE);604MADERA_MIXER_ENUMS(LHPF2, MADERA_HPLP2MIX_INPUT_1_SOURCE);605MADERA_MIXER_ENUMS(LHPF3, MADERA_HPLP3MIX_INPUT_1_SOURCE);606MADERA_MIXER_ENUMS(LHPF4, MADERA_HPLP4MIX_INPUT_1_SOURCE);607 608MADERA_MIXER_ENUMS(DSP1L, MADERA_DSP1LMIX_INPUT_1_SOURCE);609MADERA_MIXER_ENUMS(DSP1R, MADERA_DSP1RMIX_INPUT_1_SOURCE);610MADERA_DSP_AUX_ENUMS(DSP1, MADERA_DSP1AUX1MIX_INPUT_1_SOURCE);611 612MADERA_MIXER_ENUMS(DSP2L, MADERA_DSP2LMIX_INPUT_1_SOURCE);613MADERA_MIXER_ENUMS(DSP2R, MADERA_DSP2RMIX_INPUT_1_SOURCE);614MADERA_DSP_AUX_ENUMS(DSP2, MADERA_DSP2AUX1MIX_INPUT_1_SOURCE);615 616MADERA_MIXER_ENUMS(DSP3L, MADERA_DSP3LMIX_INPUT_1_SOURCE);617MADERA_MIXER_ENUMS(DSP3R, MADERA_DSP3RMIX_INPUT_1_SOURCE);618MADERA_DSP_AUX_ENUMS(DSP3, MADERA_DSP3AUX1MIX_INPUT_1_SOURCE);619 620MADERA_MIXER_ENUMS(DSP4L, MADERA_DSP4LMIX_INPUT_1_SOURCE);621MADERA_MIXER_ENUMS(DSP4R, MADERA_DSP4RMIX_INPUT_1_SOURCE);622MADERA_DSP_AUX_ENUMS(DSP4, MADERA_DSP4AUX1MIX_INPUT_1_SOURCE);623 624MADERA_MIXER_ENUMS(DSP5L, MADERA_DSP5LMIX_INPUT_1_SOURCE);625MADERA_MIXER_ENUMS(DSP5R, MADERA_DSP5RMIX_INPUT_1_SOURCE);626MADERA_DSP_AUX_ENUMS(DSP5, MADERA_DSP5AUX1MIX_INPUT_1_SOURCE);627 628MADERA_MIXER_ENUMS(DSP6L, MADERA_DSP6LMIX_INPUT_1_SOURCE);629MADERA_MIXER_ENUMS(DSP6R, MADERA_DSP6RMIX_INPUT_1_SOURCE);630MADERA_DSP_AUX_ENUMS(DSP6, MADERA_DSP6AUX1MIX_INPUT_1_SOURCE);631 632MADERA_MIXER_ENUMS(DSP7L, MADERA_DSP7LMIX_INPUT_1_SOURCE);633MADERA_MIXER_ENUMS(DSP7R, MADERA_DSP7RMIX_INPUT_1_SOURCE);634MADERA_DSP_AUX_ENUMS(DSP7, MADERA_DSP7AUX1MIX_INPUT_1_SOURCE);635 636MADERA_MIXER_ENUMS(PWM1, MADERA_PWM1MIX_INPUT_1_SOURCE);637MADERA_MIXER_ENUMS(PWM2, MADERA_PWM2MIX_INPUT_1_SOURCE);638 639MADERA_MIXER_ENUMS(OUT1L, MADERA_OUT1LMIX_INPUT_1_SOURCE);640MADERA_MIXER_ENUMS(OUT1R, MADERA_OUT1RMIX_INPUT_1_SOURCE);641MADERA_MIXER_ENUMS(OUT2L, MADERA_OUT2LMIX_INPUT_1_SOURCE);642MADERA_MIXER_ENUMS(OUT2R, MADERA_OUT2RMIX_INPUT_1_SOURCE);643MADERA_MIXER_ENUMS(OUT3L, MADERA_OUT3LMIX_INPUT_1_SOURCE);644MADERA_MIXER_ENUMS(OUT3R, MADERA_OUT3RMIX_INPUT_1_SOURCE);645MADERA_MIXER_ENUMS(SPKOUTL, MADERA_OUT4LMIX_INPUT_1_SOURCE);646MADERA_MIXER_ENUMS(SPKOUTR, MADERA_OUT4RMIX_INPUT_1_SOURCE);647MADERA_MIXER_ENUMS(SPKDAT1L, MADERA_OUT5LMIX_INPUT_1_SOURCE);648MADERA_MIXER_ENUMS(SPKDAT1R, MADERA_OUT5RMIX_INPUT_1_SOURCE);649MADERA_MIXER_ENUMS(SPKDAT2L, MADERA_OUT6LMIX_INPUT_1_SOURCE);650MADERA_MIXER_ENUMS(SPKDAT2R, MADERA_OUT6RMIX_INPUT_1_SOURCE);651 652MADERA_MIXER_ENUMS(AIF1TX1, MADERA_AIF1TX1MIX_INPUT_1_SOURCE);653MADERA_MIXER_ENUMS(AIF1TX2, MADERA_AIF1TX2MIX_INPUT_1_SOURCE);654MADERA_MIXER_ENUMS(AIF1TX3, MADERA_AIF1TX3MIX_INPUT_1_SOURCE);655MADERA_MIXER_ENUMS(AIF1TX4, MADERA_AIF1TX4MIX_INPUT_1_SOURCE);656MADERA_MIXER_ENUMS(AIF1TX5, MADERA_AIF1TX5MIX_INPUT_1_SOURCE);657MADERA_MIXER_ENUMS(AIF1TX6, MADERA_AIF1TX6MIX_INPUT_1_SOURCE);658MADERA_MIXER_ENUMS(AIF1TX7, MADERA_AIF1TX7MIX_INPUT_1_SOURCE);659MADERA_MIXER_ENUMS(AIF1TX8, MADERA_AIF1TX8MIX_INPUT_1_SOURCE);660 661MADERA_MIXER_ENUMS(AIF2TX1, MADERA_AIF2TX1MIX_INPUT_1_SOURCE);662MADERA_MIXER_ENUMS(AIF2TX2, MADERA_AIF2TX2MIX_INPUT_1_SOURCE);663MADERA_MIXER_ENUMS(AIF2TX3, MADERA_AIF2TX3MIX_INPUT_1_SOURCE);664MADERA_MIXER_ENUMS(AIF2TX4, MADERA_AIF2TX4MIX_INPUT_1_SOURCE);665MADERA_MIXER_ENUMS(AIF2TX5, MADERA_AIF2TX5MIX_INPUT_1_SOURCE);666MADERA_MIXER_ENUMS(AIF2TX6, MADERA_AIF2TX6MIX_INPUT_1_SOURCE);667MADERA_MIXER_ENUMS(AIF2TX7, MADERA_AIF2TX7MIX_INPUT_1_SOURCE);668MADERA_MIXER_ENUMS(AIF2TX8, MADERA_AIF2TX8MIX_INPUT_1_SOURCE);669 670MADERA_MIXER_ENUMS(AIF3TX1, MADERA_AIF3TX1MIX_INPUT_1_SOURCE);671MADERA_MIXER_ENUMS(AIF3TX2, MADERA_AIF3TX2MIX_INPUT_1_SOURCE);672 673MADERA_MIXER_ENUMS(AIF4TX1, MADERA_AIF4TX1MIX_INPUT_1_SOURCE);674MADERA_MIXER_ENUMS(AIF4TX2, MADERA_AIF4TX2MIX_INPUT_1_SOURCE);675 676MADERA_MIXER_ENUMS(SLIMTX1, MADERA_SLIMTX1MIX_INPUT_1_SOURCE);677MADERA_MIXER_ENUMS(SLIMTX2, MADERA_SLIMTX2MIX_INPUT_1_SOURCE);678MADERA_MIXER_ENUMS(SLIMTX3, MADERA_SLIMTX3MIX_INPUT_1_SOURCE);679MADERA_MIXER_ENUMS(SLIMTX4, MADERA_SLIMTX4MIX_INPUT_1_SOURCE);680MADERA_MIXER_ENUMS(SLIMTX5, MADERA_SLIMTX5MIX_INPUT_1_SOURCE);681MADERA_MIXER_ENUMS(SLIMTX6, MADERA_SLIMTX6MIX_INPUT_1_SOURCE);682MADERA_MIXER_ENUMS(SLIMTX7, MADERA_SLIMTX7MIX_INPUT_1_SOURCE);683MADERA_MIXER_ENUMS(SLIMTX8, MADERA_SLIMTX8MIX_INPUT_1_SOURCE);684 685MADERA_MUX_ENUMS(SPD1TX1, MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE);686MADERA_MUX_ENUMS(SPD1TX2, MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE);687 688MADERA_MUX_ENUMS(ASRC1IN1L, MADERA_ASRC1_1LMIX_INPUT_1_SOURCE);689MADERA_MUX_ENUMS(ASRC1IN1R, MADERA_ASRC1_1RMIX_INPUT_1_SOURCE);690MADERA_MUX_ENUMS(ASRC1IN2L, MADERA_ASRC1_2LMIX_INPUT_1_SOURCE);691MADERA_MUX_ENUMS(ASRC1IN2R, MADERA_ASRC1_2RMIX_INPUT_1_SOURCE);692MADERA_MUX_ENUMS(ASRC2IN1L, MADERA_ASRC2_1LMIX_INPUT_1_SOURCE);693MADERA_MUX_ENUMS(ASRC2IN1R, MADERA_ASRC2_1RMIX_INPUT_1_SOURCE);694MADERA_MUX_ENUMS(ASRC2IN2L, MADERA_ASRC2_2LMIX_INPUT_1_SOURCE);695MADERA_MUX_ENUMS(ASRC2IN2R, MADERA_ASRC2_2RMIX_INPUT_1_SOURCE);696 697MADERA_MUX_ENUMS(ISRC1INT1, MADERA_ISRC1INT1MIX_INPUT_1_SOURCE);698MADERA_MUX_ENUMS(ISRC1INT2, MADERA_ISRC1INT2MIX_INPUT_1_SOURCE);699MADERA_MUX_ENUMS(ISRC1INT3, MADERA_ISRC1INT3MIX_INPUT_1_SOURCE);700MADERA_MUX_ENUMS(ISRC1INT4, MADERA_ISRC1INT4MIX_INPUT_1_SOURCE);701 702MADERA_MUX_ENUMS(ISRC1DEC1, MADERA_ISRC1DEC1MIX_INPUT_1_SOURCE);703MADERA_MUX_ENUMS(ISRC1DEC2, MADERA_ISRC1DEC2MIX_INPUT_1_SOURCE);704MADERA_MUX_ENUMS(ISRC1DEC3, MADERA_ISRC1DEC3MIX_INPUT_1_SOURCE);705MADERA_MUX_ENUMS(ISRC1DEC4, MADERA_ISRC1DEC4MIX_INPUT_1_SOURCE);706 707MADERA_MUX_ENUMS(ISRC2INT1, MADERA_ISRC2INT1MIX_INPUT_1_SOURCE);708MADERA_MUX_ENUMS(ISRC2INT2, MADERA_ISRC2INT2MIX_INPUT_1_SOURCE);709MADERA_MUX_ENUMS(ISRC2INT3, MADERA_ISRC2INT3MIX_INPUT_1_SOURCE);710MADERA_MUX_ENUMS(ISRC2INT4, MADERA_ISRC2INT4MIX_INPUT_1_SOURCE);711 712MADERA_MUX_ENUMS(ISRC2DEC1, MADERA_ISRC2DEC1MIX_INPUT_1_SOURCE);713MADERA_MUX_ENUMS(ISRC2DEC2, MADERA_ISRC2DEC2MIX_INPUT_1_SOURCE);714MADERA_MUX_ENUMS(ISRC2DEC3, MADERA_ISRC2DEC3MIX_INPUT_1_SOURCE);715MADERA_MUX_ENUMS(ISRC2DEC4, MADERA_ISRC2DEC4MIX_INPUT_1_SOURCE);716 717MADERA_MUX_ENUMS(ISRC3INT1, MADERA_ISRC3INT1MIX_INPUT_1_SOURCE);718MADERA_MUX_ENUMS(ISRC3INT2, MADERA_ISRC3INT2MIX_INPUT_1_SOURCE);719 720MADERA_MUX_ENUMS(ISRC3DEC1, MADERA_ISRC3DEC1MIX_INPUT_1_SOURCE);721MADERA_MUX_ENUMS(ISRC3DEC2, MADERA_ISRC3DEC2MIX_INPUT_1_SOURCE);722 723MADERA_MUX_ENUMS(ISRC4INT1, MADERA_ISRC4INT1MIX_INPUT_1_SOURCE);724MADERA_MUX_ENUMS(ISRC4INT2, MADERA_ISRC4INT2MIX_INPUT_1_SOURCE);725 726MADERA_MUX_ENUMS(ISRC4DEC1, MADERA_ISRC4DEC1MIX_INPUT_1_SOURCE);727MADERA_MUX_ENUMS(ISRC4DEC2, MADERA_ISRC4DEC2MIX_INPUT_1_SOURCE);728 729static const char * const cs47l85_aec_loopback_texts[] = {730	"HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R",731	"SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R",732};733 734static const unsigned int cs47l85_aec_loopback_values[] = {735	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,736};737 738static const struct soc_enum cs47l85_aec1_loopback =739	SOC_VALUE_ENUM_SINGLE(MADERA_DAC_AEC_CONTROL_1,740			      MADERA_AEC1_LOOPBACK_SRC_SHIFT, 0xf,741			      ARRAY_SIZE(cs47l85_aec_loopback_texts),742			      cs47l85_aec_loopback_texts,743			      cs47l85_aec_loopback_values);744 745static const struct soc_enum cs47l85_aec2_loopback =746	SOC_VALUE_ENUM_SINGLE(MADERA_DAC_AEC_CONTROL_2,747			      MADERA_AEC2_LOOPBACK_SRC_SHIFT, 0xf,748			      ARRAY_SIZE(cs47l85_aec_loopback_texts),749			      cs47l85_aec_loopback_texts,750			      cs47l85_aec_loopback_values);751 752static const struct snd_kcontrol_new cs47l85_aec_loopback_mux[] = {753	SOC_DAPM_ENUM("AEC1 Loopback", cs47l85_aec1_loopback),754	SOC_DAPM_ENUM("AEC2 Loopback", cs47l85_aec2_loopback),755};756 757static const struct snd_kcontrol_new cs47l85_anc_input_mux[] = {758	SOC_DAPM_ENUM("RXANCL Input", madera_anc_input_src[0]),759	SOC_DAPM_ENUM("RXANCL Channel", madera_anc_input_src[1]),760	SOC_DAPM_ENUM("RXANCR Input", madera_anc_input_src[2]),761	SOC_DAPM_ENUM("RXANCR Channel", madera_anc_input_src[3]),762};763 764static const struct snd_kcontrol_new cs47l85_anc_ng_mux =765	SOC_DAPM_ENUM("RXANC NG Source", madera_anc_ng_enum);766 767static const struct snd_kcontrol_new cs47l85_output_anc_src[] = {768	SOC_DAPM_ENUM("HPOUT1L ANC Source", madera_output_anc_src[0]),769	SOC_DAPM_ENUM("HPOUT1R ANC Source", madera_output_anc_src[1]),770	SOC_DAPM_ENUM("HPOUT2L ANC Source", madera_output_anc_src[2]),771	SOC_DAPM_ENUM("HPOUT2R ANC Source", madera_output_anc_src[3]),772	SOC_DAPM_ENUM("HPOUT3L ANC Source", madera_output_anc_src[4]),773	SOC_DAPM_ENUM("HPOUT3R ANC Source", madera_output_anc_src[5]),774	SOC_DAPM_ENUM("SPKOUTL ANC Source", madera_output_anc_src[6]),775	SOC_DAPM_ENUM("SPKOUTR ANC Source", madera_output_anc_src[7]),776	SOC_DAPM_ENUM("SPKDAT1L ANC Source", madera_output_anc_src[8]),777	SOC_DAPM_ENUM("SPKDAT1R ANC Source", madera_output_anc_src[9]),778	SOC_DAPM_ENUM("SPKDAT2L ANC Source", madera_output_anc_src[10]),779	SOC_DAPM_ENUM("SPKDAT2R ANC Source", madera_output_anc_src[11]),780};781 782static const struct snd_soc_dapm_widget cs47l85_dapm_widgets[] = {783SND_SOC_DAPM_SUPPLY("SYSCLK", MADERA_SYSTEM_CLOCK_1, MADERA_SYSCLK_ENA_SHIFT,784		    0, madera_sysclk_ev,785		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |786		    SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),787SND_SOC_DAPM_SUPPLY("ASYNCCLK", MADERA_ASYNC_CLOCK_1,788		    MADERA_ASYNC_CLK_ENA_SHIFT, 0, madera_clk_ev,789		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),790SND_SOC_DAPM_SUPPLY("OPCLK", MADERA_OUTPUT_SYSTEM_CLOCK,791		    MADERA_OPCLK_ENA_SHIFT, 0, NULL, 0),792SND_SOC_DAPM_SUPPLY("ASYNCOPCLK", MADERA_OUTPUT_ASYNC_CLOCK,793		    MADERA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0),794SND_SOC_DAPM_SUPPLY("DSPCLK", MADERA_DSP_CLOCK_1, MADERA_DSP_CLK_ENA_SHIFT,795		    0, madera_clk_ev,796		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),797 798SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0, 0),799SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD3", 0, 0),800SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD4", 0, 0),801SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD1", 20, 0),802SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD2", 20, 0),803SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS),804SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDL", 0, 0),805SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0, 0),806 807SND_SOC_DAPM_SUPPLY("MICBIAS1", MADERA_MIC_BIAS_CTRL_1,808		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),809SND_SOC_DAPM_SUPPLY("MICBIAS2", MADERA_MIC_BIAS_CTRL_2,810		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),811SND_SOC_DAPM_SUPPLY("MICBIAS3", MADERA_MIC_BIAS_CTRL_3,812		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),813SND_SOC_DAPM_SUPPLY("MICBIAS4", MADERA_MIC_BIAS_CTRL_4,814		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),815 816SND_SOC_DAPM_SUPPLY("FXCLK", SND_SOC_NOPM,817		    MADERA_DOM_GRP_FX, 0,818		    madera_domain_clk_ev,819		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),820SND_SOC_DAPM_SUPPLY("ASRC1CLK", SND_SOC_NOPM,821		    MADERA_DOM_GRP_ASRC1, 0,822		    madera_domain_clk_ev,823		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),824SND_SOC_DAPM_SUPPLY("ASRC2CLK", SND_SOC_NOPM,825		    MADERA_DOM_GRP_ASRC2, 0,826		    madera_domain_clk_ev,827		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),828SND_SOC_DAPM_SUPPLY("ISRC1CLK", SND_SOC_NOPM,829		    MADERA_DOM_GRP_ISRC1, 0,830		    madera_domain_clk_ev,831		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),832SND_SOC_DAPM_SUPPLY("ISRC2CLK", SND_SOC_NOPM,833		    MADERA_DOM_GRP_ISRC2, 0,834		    madera_domain_clk_ev,835		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),836SND_SOC_DAPM_SUPPLY("ISRC3CLK", SND_SOC_NOPM,837		    MADERA_DOM_GRP_ISRC3, 0,838		    madera_domain_clk_ev,839		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),840SND_SOC_DAPM_SUPPLY("ISRC4CLK", SND_SOC_NOPM,841		    MADERA_DOM_GRP_ISRC4, 0,842		    madera_domain_clk_ev,843		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),844SND_SOC_DAPM_SUPPLY("OUTCLK", SND_SOC_NOPM,845		    MADERA_DOM_GRP_OUT, 0,846		    madera_domain_clk_ev,847		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),848SND_SOC_DAPM_SUPPLY("SPDCLK", SND_SOC_NOPM,849		    MADERA_DOM_GRP_SPD, 0,850		    madera_domain_clk_ev,851		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),852SND_SOC_DAPM_SUPPLY("DSP1CLK", SND_SOC_NOPM,853		    MADERA_DOM_GRP_DSP1, 0,854		    madera_domain_clk_ev,855		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),856SND_SOC_DAPM_SUPPLY("DSP2CLK", SND_SOC_NOPM,857		    MADERA_DOM_GRP_DSP2, 0,858		    madera_domain_clk_ev,859		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),860SND_SOC_DAPM_SUPPLY("DSP3CLK", SND_SOC_NOPM,861		    MADERA_DOM_GRP_DSP3, 0,862		    madera_domain_clk_ev,863		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),864SND_SOC_DAPM_SUPPLY("DSP4CLK", SND_SOC_NOPM,865		    MADERA_DOM_GRP_DSP4, 0,866		    madera_domain_clk_ev,867		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),868SND_SOC_DAPM_SUPPLY("DSP5CLK", SND_SOC_NOPM,869		    MADERA_DOM_GRP_DSP5, 0,870		    madera_domain_clk_ev,871		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),872SND_SOC_DAPM_SUPPLY("DSP6CLK", SND_SOC_NOPM,873		    MADERA_DOM_GRP_DSP6, 0,874		    madera_domain_clk_ev,875		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),876SND_SOC_DAPM_SUPPLY("DSP7CLK", SND_SOC_NOPM,877		    MADERA_DOM_GRP_DSP7, 0,878		    madera_domain_clk_ev,879		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),880SND_SOC_DAPM_SUPPLY("AIF1TXCLK", SND_SOC_NOPM,881		    MADERA_DOM_GRP_AIF1, 0,882		    madera_domain_clk_ev,883		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),884SND_SOC_DAPM_SUPPLY("AIF2TXCLK", SND_SOC_NOPM,885		    MADERA_DOM_GRP_AIF2, 0,886		    madera_domain_clk_ev,887		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),888SND_SOC_DAPM_SUPPLY("AIF3TXCLK", SND_SOC_NOPM,889		    MADERA_DOM_GRP_AIF3, 0,890		    madera_domain_clk_ev,891		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),892SND_SOC_DAPM_SUPPLY("AIF4TXCLK", SND_SOC_NOPM,893		    MADERA_DOM_GRP_AIF4, 0,894		    madera_domain_clk_ev,895		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),896SND_SOC_DAPM_SUPPLY("SLIMBUSCLK", SND_SOC_NOPM,897		    MADERA_DOM_GRP_SLIMBUS, 0,898		    madera_domain_clk_ev,899		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),900SND_SOC_DAPM_SUPPLY("PWMCLK", SND_SOC_NOPM,901		    MADERA_DOM_GRP_PWM, 0,902		    madera_domain_clk_ev,903		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),904 905SND_SOC_DAPM_SUPPLY("RXANC NG External Clock", SND_SOC_NOPM,906		    MADERA_EXT_NG_SEL_SET_SHIFT, 0, madera_anc_ev,907		    SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),908 909SND_SOC_DAPM_SUPPLY("RXANC NG Clock", SND_SOC_NOPM,910		    MADERA_CLK_NG_ENA_SET_SHIFT, 0, madera_anc_ev,911		    SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),912 913SND_SOC_DAPM_SIGGEN("TONE"),914SND_SOC_DAPM_SIGGEN("NOISE"),915 916SND_SOC_DAPM_INPUT("IN1ALN"),917SND_SOC_DAPM_INPUT("IN1ALP"),918SND_SOC_DAPM_INPUT("IN1BN"),919SND_SOC_DAPM_INPUT("IN1BP"),920SND_SOC_DAPM_INPUT("IN1RN"),921SND_SOC_DAPM_INPUT("IN1RP"),922SND_SOC_DAPM_INPUT("IN2ALN"),923SND_SOC_DAPM_INPUT("IN2ALP"),924SND_SOC_DAPM_INPUT("IN2ARN"),925SND_SOC_DAPM_INPUT("IN2ARP"),926SND_SOC_DAPM_INPUT("IN2BLN"),927SND_SOC_DAPM_INPUT("IN2BLP"),928SND_SOC_DAPM_INPUT("IN2BRN"),929SND_SOC_DAPM_INPUT("IN2BRP"),930SND_SOC_DAPM_INPUT("IN3LN"),931SND_SOC_DAPM_INPUT("IN3LP"),932SND_SOC_DAPM_INPUT("IN3RN"),933SND_SOC_DAPM_INPUT("IN3RP"),934SND_SOC_DAPM_INPUT("DMICCLK4"),935SND_SOC_DAPM_INPUT("DMICDAT4"),936SND_SOC_DAPM_INPUT("DMICCLK5"),937SND_SOC_DAPM_INPUT("DMICDAT5"),938SND_SOC_DAPM_INPUT("DMICCLK6"),939SND_SOC_DAPM_INPUT("DMICDAT6"),940 941SND_SOC_DAPM_MUX("IN1L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[0]),942SND_SOC_DAPM_MUX("IN2L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[2]),943SND_SOC_DAPM_MUX("IN2R Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[3]),944 945SND_SOC_DAPM_MUX("IN1L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),946SND_SOC_DAPM_MUX("IN1R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),947 948SND_SOC_DAPM_MUX("IN2L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),949SND_SOC_DAPM_MUX("IN2R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),950 951SND_SOC_DAPM_MUX("IN3L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[2]),952SND_SOC_DAPM_MUX("IN3R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[2]),953 954SND_SOC_DAPM_OUTPUT("DRC1 Signal Activity"),955SND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),956 957SND_SOC_DAPM_OUTPUT("DSP Trigger Out"),958 959SND_SOC_DAPM_PGA("PWM1 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM1_ENA_SHIFT,960		 0, NULL, 0),961SND_SOC_DAPM_PGA("PWM2 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM2_ENA_SHIFT,962		 0, NULL, 0),963 964SND_SOC_DAPM_PGA("RXANCL NG External", SND_SOC_NOPM, 0, 0, NULL, 0),965SND_SOC_DAPM_PGA("RXANCR NG External", SND_SOC_NOPM, 0, 0, NULL, 0),966 967SND_SOC_DAPM_PGA("RXANCL NG Internal", SND_SOC_NOPM, 0, 0, NULL, 0),968SND_SOC_DAPM_PGA("RXANCR NG Internal", SND_SOC_NOPM, 0, 0, NULL, 0),969 970SND_SOC_DAPM_MUX("RXANCL Left Input", SND_SOC_NOPM, 0, 0,971		 &cs47l85_anc_input_mux[0]),972SND_SOC_DAPM_MUX("RXANCL Right Input", SND_SOC_NOPM, 0, 0,973		 &cs47l85_anc_input_mux[0]),974SND_SOC_DAPM_MUX("RXANCL Channel", SND_SOC_NOPM, 0, 0,975		 &cs47l85_anc_input_mux[1]),976SND_SOC_DAPM_MUX("RXANCL NG Mux", SND_SOC_NOPM, 0, 0, &cs47l85_anc_ng_mux),977SND_SOC_DAPM_MUX("RXANCR Left Input", SND_SOC_NOPM, 0, 0,978		 &cs47l85_anc_input_mux[2]),979SND_SOC_DAPM_MUX("RXANCR Right Input", SND_SOC_NOPM, 0, 0,980		 &cs47l85_anc_input_mux[2]),981SND_SOC_DAPM_MUX("RXANCR Channel", SND_SOC_NOPM, 0, 0,982		 &cs47l85_anc_input_mux[3]),983SND_SOC_DAPM_MUX("RXANCR NG Mux", SND_SOC_NOPM, 0, 0, &cs47l85_anc_ng_mux),984 985SND_SOC_DAPM_PGA_E("RXANCL", SND_SOC_NOPM, MADERA_CLK_L_ENA_SET_SHIFT,986		   0, NULL, 0, madera_anc_ev,987		   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),988SND_SOC_DAPM_PGA_E("RXANCR", SND_SOC_NOPM, MADERA_CLK_R_ENA_SET_SHIFT,989		   0, NULL, 0, madera_anc_ev,990		   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),991 992SND_SOC_DAPM_MUX("HPOUT1L ANC Source", SND_SOC_NOPM, 0, 0,993		 &cs47l85_output_anc_src[0]),994SND_SOC_DAPM_MUX("HPOUT1R ANC Source", SND_SOC_NOPM, 0, 0,995		 &cs47l85_output_anc_src[1]),996SND_SOC_DAPM_MUX("HPOUT2L ANC Source", SND_SOC_NOPM, 0, 0,997		 &cs47l85_output_anc_src[2]),998SND_SOC_DAPM_MUX("HPOUT2R ANC Source", SND_SOC_NOPM, 0, 0,999		 &cs47l85_output_anc_src[3]),1000SND_SOC_DAPM_MUX("HPOUT3L ANC Source", SND_SOC_NOPM, 0, 0,1001		 &cs47l85_output_anc_src[4]),1002SND_SOC_DAPM_MUX("HPOUT3R ANC Source", SND_SOC_NOPM, 0, 0,1003		 &cs47l85_output_anc_src[5]),1004SND_SOC_DAPM_MUX("SPKOUTL ANC Source", SND_SOC_NOPM, 0, 0,1005		 &cs47l85_output_anc_src[6]),1006SND_SOC_DAPM_MUX("SPKOUTR ANC Source", SND_SOC_NOPM, 0, 0,1007		 &cs47l85_output_anc_src[7]),1008SND_SOC_DAPM_MUX("SPKDAT1L ANC Source", SND_SOC_NOPM, 0, 0,1009		 &cs47l85_output_anc_src[8]),1010SND_SOC_DAPM_MUX("SPKDAT1R ANC Source", SND_SOC_NOPM, 0, 0,1011		 &cs47l85_output_anc_src[9]),1012SND_SOC_DAPM_MUX("SPKDAT2L ANC Source", SND_SOC_NOPM, 0, 0,1013		 &cs47l85_output_anc_src[10]),1014SND_SOC_DAPM_MUX("SPKDAT2R ANC Source", SND_SOC_NOPM, 0, 0,1015		 &cs47l85_output_anc_src[11]),1016 1017SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,1018		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX1_ENA_SHIFT, 0),1019SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1,1020		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX2_ENA_SHIFT, 0),1021SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2,1022		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX3_ENA_SHIFT, 0),1023SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3,1024		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX4_ENA_SHIFT, 0),1025SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4,1026		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX5_ENA_SHIFT, 0),1027SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5,1028		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX6_ENA_SHIFT, 0),1029SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 6,1030		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX7_ENA_SHIFT, 0),1031SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 7,1032		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX8_ENA_SHIFT, 0),1033 1034SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0,1035		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX1_ENA_SHIFT, 0),1036SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1,1037		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX2_ENA_SHIFT, 0),1038SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2,1039		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX3_ENA_SHIFT, 0),1040SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3,1041		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX4_ENA_SHIFT, 0),1042SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4,1043		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX5_ENA_SHIFT, 0),1044SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5,1045		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX6_ENA_SHIFT, 0),1046SND_SOC_DAPM_AIF_OUT("AIF2TX7", NULL, 6,1047		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX7_ENA_SHIFT, 0),1048SND_SOC_DAPM_AIF_OUT("AIF2TX8", NULL, 7,1049		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX8_ENA_SHIFT, 0),1050 1051SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,1052		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1053		     MADERA_SLIMTX1_ENA_SHIFT, 0),1054SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 1,1055		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1056		     MADERA_SLIMTX2_ENA_SHIFT, 0),1057SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 2,1058		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1059		     MADERA_SLIMTX3_ENA_SHIFT, 0),1060SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 3,1061		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1062		     MADERA_SLIMTX4_ENA_SHIFT, 0),1063SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 4,1064		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1065		     MADERA_SLIMTX5_ENA_SHIFT, 0),1066SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 5,1067		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1068		     MADERA_SLIMTX6_ENA_SHIFT, 0),1069SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 6,1070		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1071		     MADERA_SLIMTX7_ENA_SHIFT, 0),1072SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 7,1073		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,1074		     MADERA_SLIMTX8_ENA_SHIFT, 0),1075 1076SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,1077		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX1_ENA_SHIFT, 0),1078SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1,1079		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX2_ENA_SHIFT, 0),1080 1081SND_SOC_DAPM_AIF_OUT("AIF4TX1", NULL, 0,1082		     MADERA_AIF4_TX_ENABLES, MADERA_AIF4TX1_ENA_SHIFT, 0),1083SND_SOC_DAPM_AIF_OUT("AIF4TX2", NULL, 1,1084		     MADERA_AIF4_TX_ENABLES, MADERA_AIF4TX2_ENA_SHIFT, 0),1085 1086SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,1087		   MADERA_OUT1L_ENA_SHIFT, 0, NULL, 0, cs47l85_hp_ev,1088		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1089		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1090SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,1091		   MADERA_OUT1R_ENA_SHIFT, 0, NULL, 0, cs47l85_hp_ev,1092		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1093		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1094SND_SOC_DAPM_PGA_E("OUT2L", MADERA_OUTPUT_ENABLES_1,1095		   MADERA_OUT2L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1096		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1097		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1098SND_SOC_DAPM_PGA_E("OUT2R", MADERA_OUTPUT_ENABLES_1,1099		   MADERA_OUT2R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1100		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1101		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1102SND_SOC_DAPM_PGA_E("OUT3L", MADERA_OUTPUT_ENABLES_1,1103		   MADERA_OUT3L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1104		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1105		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1106SND_SOC_DAPM_PGA_E("OUT3R", MADERA_OUTPUT_ENABLES_1,1107		   MADERA_OUT3R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1108		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1109		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1110SND_SOC_DAPM_PGA_E("OUT4L", SND_SOC_NOPM,1111		   MADERA_OUT4L_ENA_SHIFT, 0, NULL, 0, madera_spk_ev,1112		   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),1113SND_SOC_DAPM_PGA_E("OUT4R", SND_SOC_NOPM,1114		   MADERA_OUT4R_ENA_SHIFT, 0, NULL, 0, madera_spk_ev,1115		   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),1116SND_SOC_DAPM_PGA_E("OUT5L", MADERA_OUTPUT_ENABLES_1,1117		   MADERA_OUT5L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1118		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),1119SND_SOC_DAPM_PGA_E("OUT5R", MADERA_OUTPUT_ENABLES_1,1120		   MADERA_OUT5R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1121		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),1122SND_SOC_DAPM_PGA_E("OUT6L", MADERA_OUTPUT_ENABLES_1,1123		   MADERA_OUT6L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1124		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),1125SND_SOC_DAPM_PGA_E("OUT6R", MADERA_OUTPUT_ENABLES_1,1126		   MADERA_OUT6R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,1127		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),1128 1129SND_SOC_DAPM_PGA("SPD1TX1", MADERA_SPD1_TX_CONTROL,1130		 MADERA_SPD1_VAL1_SHIFT, 0, NULL, 0),1131SND_SOC_DAPM_PGA("SPD1TX2", MADERA_SPD1_TX_CONTROL,1132		 MADERA_SPD1_VAL2_SHIFT, 0, NULL, 0),1133SND_SOC_DAPM_OUT_DRV("SPD1", MADERA_SPD1_TX_CONTROL,1134		     MADERA_SPD1_ENA_SHIFT, 0, NULL, 0),1135 1136/*1137 * Input mux widgets arranged in order of sources in MADERA_MIXER_INPUT_ROUTES1138 * to take advantage of cache lookup in DAPM1139 */1140SND_SOC_DAPM_PGA("Noise Generator", MADERA_COMFORT_NOISE_GENERATOR,1141		 MADERA_NOISE_GEN_ENA_SHIFT, 0, NULL, 0),1142 1143SND_SOC_DAPM_PGA("Tone Generator 1", MADERA_TONE_GENERATOR_1,1144		 MADERA_TONE1_ENA_SHIFT, 0, NULL, 0),1145SND_SOC_DAPM_PGA("Tone Generator 2", MADERA_TONE_GENERATOR_1,1146		 MADERA_TONE2_ENA_SHIFT, 0, NULL, 0),1147 1148SND_SOC_DAPM_SIGGEN("HAPTICS"),1149 1150SND_SOC_DAPM_MUX("AEC1 Loopback", MADERA_DAC_AEC_CONTROL_1,1151		 MADERA_AEC1_LOOPBACK_ENA_SHIFT, 0,1152		 &cs47l85_aec_loopback_mux[0]),1153SND_SOC_DAPM_MUX("AEC2 Loopback", MADERA_DAC_AEC_CONTROL_2,1154		 MADERA_AEC2_LOOPBACK_ENA_SHIFT, 0,1155		 &cs47l85_aec_loopback_mux[1]),1156 1157SND_SOC_DAPM_PGA_E("IN1L", MADERA_INPUT_ENABLES, MADERA_IN1L_ENA_SHIFT,1158		   0, NULL, 0, madera_in_ev,1159		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1160		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1161SND_SOC_DAPM_PGA_E("IN1R", MADERA_INPUT_ENABLES, MADERA_IN1R_ENA_SHIFT,1162		   0, NULL, 0, madera_in_ev,1163		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1164		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1165SND_SOC_DAPM_PGA_E("IN2L", MADERA_INPUT_ENABLES, MADERA_IN2L_ENA_SHIFT,1166		   0, NULL, 0, madera_in_ev,1167		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1168		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1169SND_SOC_DAPM_PGA_E("IN2R", MADERA_INPUT_ENABLES, MADERA_IN2R_ENA_SHIFT,1170		   0, NULL, 0, madera_in_ev,1171		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1172		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1173SND_SOC_DAPM_PGA_E("IN3L", MADERA_INPUT_ENABLES, MADERA_IN3L_ENA_SHIFT,1174		   0, NULL, 0, madera_in_ev,1175		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1176		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1177SND_SOC_DAPM_PGA_E("IN3R", MADERA_INPUT_ENABLES, MADERA_IN3R_ENA_SHIFT,1178		   0, NULL, 0, madera_in_ev,1179		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1180		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1181SND_SOC_DAPM_PGA_E("IN4L", MADERA_INPUT_ENABLES, MADERA_IN4L_ENA_SHIFT,1182		   0, NULL, 0, madera_in_ev,1183		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1184		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1185SND_SOC_DAPM_PGA_E("IN4R", MADERA_INPUT_ENABLES, MADERA_IN4R_ENA_SHIFT,1186		   0, NULL, 0, madera_in_ev,1187		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1188		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1189SND_SOC_DAPM_PGA_E("IN5L", MADERA_INPUT_ENABLES, MADERA_IN5L_ENA_SHIFT,1190		   0, NULL, 0, madera_in_ev,1191		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1192		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1193SND_SOC_DAPM_PGA_E("IN5R", MADERA_INPUT_ENABLES, MADERA_IN5R_ENA_SHIFT,1194		   0, NULL, 0, madera_in_ev,1195		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1196		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1197SND_SOC_DAPM_PGA_E("IN6L", MADERA_INPUT_ENABLES, MADERA_IN6L_ENA_SHIFT,1198		   0, NULL, 0, madera_in_ev,1199		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1200		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1201SND_SOC_DAPM_PGA_E("IN6R", MADERA_INPUT_ENABLES, MADERA_IN6R_ENA_SHIFT,1202		   0, NULL, 0, madera_in_ev,1203		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |1204		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),1205 1206SND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0,1207		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX1_ENA_SHIFT, 0),1208SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1,1209		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX2_ENA_SHIFT, 0),1210SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2,1211		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX3_ENA_SHIFT, 0),1212SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3,1213		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX4_ENA_SHIFT, 0),1214SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4,1215		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX5_ENA_SHIFT, 0),1216SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5,1217		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX6_ENA_SHIFT, 0),1218SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 6,1219		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX7_ENA_SHIFT, 0),1220SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 7,1221		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX8_ENA_SHIFT, 0),1222 1223SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,1224		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX1_ENA_SHIFT, 0),1225SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1,1226		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX2_ENA_SHIFT, 0),1227SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2,1228		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX3_ENA_SHIFT, 0),1229SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3,1230		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX4_ENA_SHIFT, 0),1231SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4,1232		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX5_ENA_SHIFT, 0),1233SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5,1234		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX6_ENA_SHIFT, 0),1235SND_SOC_DAPM_AIF_IN("AIF2RX7", NULL, 6,1236		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX7_ENA_SHIFT, 0),1237SND_SOC_DAPM_AIF_IN("AIF2RX8", NULL, 7,1238		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX8_ENA_SHIFT, 0),1239 1240SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,1241		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX1_ENA_SHIFT, 0),1242SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1,1243		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX2_ENA_SHIFT, 0),1244 1245SND_SOC_DAPM_AIF_IN("AIF4RX1", NULL, 0,1246		    MADERA_AIF4_RX_ENABLES, MADERA_AIF4RX1_ENA_SHIFT, 0),1247SND_SOC_DAPM_AIF_IN("AIF4RX2", NULL, 1,1248		    MADERA_AIF4_RX_ENABLES, MADERA_AIF4RX2_ENA_SHIFT, 0),1249 1250SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0,1251		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1252		    MADERA_SLIMRX1_ENA_SHIFT, 0),1253SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 1,1254		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1255		    MADERA_SLIMRX2_ENA_SHIFT, 0),1256SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 2,1257		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1258		    MADERA_SLIMRX3_ENA_SHIFT, 0),1259SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 3,1260		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1261		    MADERA_SLIMRX4_ENA_SHIFT, 0),1262SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 4,1263		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1264		    MADERA_SLIMRX5_ENA_SHIFT, 0),1265SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 5,1266		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1267		    MADERA_SLIMRX6_ENA_SHIFT, 0),1268SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 6,1269		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1270		    MADERA_SLIMRX7_ENA_SHIFT, 0),1271SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 7,1272		    MADERA_SLIMBUS_RX_CHANNEL_ENABLE,1273		    MADERA_SLIMRX8_ENA_SHIFT, 0),1274 1275SND_SOC_DAPM_PGA("EQ1", MADERA_EQ1_1, MADERA_EQ1_ENA_SHIFT, 0, NULL, 0),1276SND_SOC_DAPM_PGA("EQ2", MADERA_EQ2_1, MADERA_EQ2_ENA_SHIFT, 0, NULL, 0),1277SND_SOC_DAPM_PGA("EQ3", MADERA_EQ3_1, MADERA_EQ3_ENA_SHIFT, 0, NULL, 0),1278SND_SOC_DAPM_PGA("EQ4", MADERA_EQ4_1, MADERA_EQ4_ENA_SHIFT, 0, NULL, 0),1279 1280SND_SOC_DAPM_PGA("DRC1L", MADERA_DRC1_CTRL1, MADERA_DRC1L_ENA_SHIFT, 0,1281		 NULL, 0),1282SND_SOC_DAPM_PGA("DRC1R", MADERA_DRC1_CTRL1, MADERA_DRC1R_ENA_SHIFT, 0,1283		 NULL, 0),1284SND_SOC_DAPM_PGA("DRC2L", MADERA_DRC2_CTRL1, MADERA_DRC2L_ENA_SHIFT, 0,1285		 NULL, 0),1286SND_SOC_DAPM_PGA("DRC2R", MADERA_DRC2_CTRL1, MADERA_DRC2R_ENA_SHIFT, 0,1287		 NULL, 0),1288 1289SND_SOC_DAPM_PGA("LHPF1", MADERA_HPLPF1_1, MADERA_LHPF1_ENA_SHIFT, 0,1290		 NULL, 0),1291SND_SOC_DAPM_PGA("LHPF2", MADERA_HPLPF2_1, MADERA_LHPF2_ENA_SHIFT, 0,1292		 NULL, 0),1293SND_SOC_DAPM_PGA("LHPF3", MADERA_HPLPF3_1, MADERA_LHPF3_ENA_SHIFT, 0,1294		 NULL, 0),1295SND_SOC_DAPM_PGA("LHPF4", MADERA_HPLPF4_1, MADERA_LHPF4_ENA_SHIFT, 0,1296		 NULL, 0),1297 1298SND_SOC_DAPM_PGA("ASRC1IN1L", MADERA_ASRC1_ENABLE, MADERA_ASRC1_IN1L_ENA_SHIFT,1299		 0, NULL, 0),1300SND_SOC_DAPM_PGA("ASRC1IN1R", MADERA_ASRC1_ENABLE, MADERA_ASRC1_IN1R_ENA_SHIFT,1301		 0, NULL, 0),1302SND_SOC_DAPM_PGA("ASRC1IN2L", MADERA_ASRC1_ENABLE, MADERA_ASRC1_IN2L_ENA_SHIFT,1303		 0, NULL, 0),1304SND_SOC_DAPM_PGA("ASRC1IN2R", MADERA_ASRC1_ENABLE, MADERA_ASRC1_IN2R_ENA_SHIFT,1305		 0, NULL, 0),1306 1307SND_SOC_DAPM_PGA("ASRC2IN1L", MADERA_ASRC2_ENABLE, MADERA_ASRC2_IN1L_ENA_SHIFT,1308		 0, NULL, 0),1309SND_SOC_DAPM_PGA("ASRC2IN1R", MADERA_ASRC2_ENABLE, MADERA_ASRC2_IN1R_ENA_SHIFT,1310		 0, NULL, 0),1311SND_SOC_DAPM_PGA("ASRC2IN2L", MADERA_ASRC2_ENABLE, MADERA_ASRC2_IN2L_ENA_SHIFT,1312		 0, NULL, 0),1313SND_SOC_DAPM_PGA("ASRC2IN2R", MADERA_ASRC2_ENABLE, MADERA_ASRC2_IN2R_ENA_SHIFT,1314		 0, NULL, 0),1315 1316SND_SOC_DAPM_PGA("ISRC1DEC1", MADERA_ISRC_1_CTRL_3,1317		 MADERA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),1318SND_SOC_DAPM_PGA("ISRC1DEC2", MADERA_ISRC_1_CTRL_3,1319		 MADERA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),1320SND_SOC_DAPM_PGA("ISRC1DEC3", MADERA_ISRC_1_CTRL_3,1321		 MADERA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0),1322SND_SOC_DAPM_PGA("ISRC1DEC4", MADERA_ISRC_1_CTRL_3,1323		 MADERA_ISRC1_DEC4_ENA_SHIFT, 0, NULL, 0),1324 1325SND_SOC_DAPM_PGA("ISRC1INT1", MADERA_ISRC_1_CTRL_3,1326		 MADERA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),1327SND_SOC_DAPM_PGA("ISRC1INT2", MADERA_ISRC_1_CTRL_3,1328		 MADERA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),1329SND_SOC_DAPM_PGA("ISRC1INT3", MADERA_ISRC_1_CTRL_3,1330		 MADERA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0),1331SND_SOC_DAPM_PGA("ISRC1INT4", MADERA_ISRC_1_CTRL_3,1332		 MADERA_ISRC1_INT4_ENA_SHIFT, 0, NULL, 0),1333 1334SND_SOC_DAPM_PGA("ISRC2DEC1", MADERA_ISRC_2_CTRL_3,1335		 MADERA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),1336SND_SOC_DAPM_PGA("ISRC2DEC2", MADERA_ISRC_2_CTRL_3,1337		 MADERA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0),1338SND_SOC_DAPM_PGA("ISRC2DEC3", MADERA_ISRC_2_CTRL_3,1339		 MADERA_ISRC2_DEC3_ENA_SHIFT, 0, NULL, 0),1340SND_SOC_DAPM_PGA("ISRC2DEC4", MADERA_ISRC_2_CTRL_3,1341		 MADERA_ISRC2_DEC4_ENA_SHIFT, 0, NULL, 0),1342 1343SND_SOC_DAPM_PGA("ISRC2INT1", MADERA_ISRC_2_CTRL_3,1344		 MADERA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),1345SND_SOC_DAPM_PGA("ISRC2INT2", MADERA_ISRC_2_CTRL_3,1346		 MADERA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0),1347SND_SOC_DAPM_PGA("ISRC2INT3", MADERA_ISRC_2_CTRL_3,1348		 MADERA_ISRC2_INT3_ENA_SHIFT, 0, NULL, 0),1349SND_SOC_DAPM_PGA("ISRC2INT4", MADERA_ISRC_2_CTRL_3,1350		 MADERA_ISRC2_INT4_ENA_SHIFT, 0, NULL, 0),1351 1352SND_SOC_DAPM_PGA("ISRC3DEC1", MADERA_ISRC_3_CTRL_3,1353		 MADERA_ISRC3_DEC1_ENA_SHIFT, 0, NULL, 0),1354SND_SOC_DAPM_PGA("ISRC3DEC2", MADERA_ISRC_3_CTRL_3,1355		 MADERA_ISRC3_DEC2_ENA_SHIFT, 0, NULL, 0),1356 1357SND_SOC_DAPM_PGA("ISRC3INT1", MADERA_ISRC_3_CTRL_3,1358		 MADERA_ISRC3_INT1_ENA_SHIFT, 0, NULL, 0),1359SND_SOC_DAPM_PGA("ISRC3INT2", MADERA_ISRC_3_CTRL_3,1360		 MADERA_ISRC3_INT2_ENA_SHIFT, 0, NULL, 0),1361 1362SND_SOC_DAPM_PGA("ISRC4DEC1", MADERA_ISRC_4_CTRL_3,1363		 MADERA_ISRC4_DEC1_ENA_SHIFT, 0, NULL, 0),1364SND_SOC_DAPM_PGA("ISRC4DEC2", MADERA_ISRC_4_CTRL_3,1365		 MADERA_ISRC4_DEC2_ENA_SHIFT, 0, NULL, 0),1366 1367SND_SOC_DAPM_PGA("ISRC4INT1", MADERA_ISRC_4_CTRL_3,1368		 MADERA_ISRC4_INT1_ENA_SHIFT, 0, NULL, 0),1369SND_SOC_DAPM_PGA("ISRC4INT2", MADERA_ISRC_4_CTRL_3,1370		 MADERA_ISRC4_INT2_ENA_SHIFT, 0, NULL, 0),1371 1372WM_ADSP2("DSP1", 0, cs47l85_adsp_power_ev),1373WM_ADSP2("DSP2", 1, cs47l85_adsp_power_ev),1374WM_ADSP2("DSP3", 2, cs47l85_adsp_power_ev),1375WM_ADSP2("DSP4", 3, cs47l85_adsp_power_ev),1376WM_ADSP2("DSP5", 4, cs47l85_adsp_power_ev),1377WM_ADSP2("DSP6", 5, cs47l85_adsp_power_ev),1378WM_ADSP2("DSP7", 6, cs47l85_adsp_power_ev),1379 1380/* End of ordered input mux widgets */1381 1382MADERA_MIXER_WIDGETS(EQ1, "EQ1"),1383MADERA_MIXER_WIDGETS(EQ2, "EQ2"),1384MADERA_MIXER_WIDGETS(EQ3, "EQ3"),1385MADERA_MIXER_WIDGETS(EQ4, "EQ4"),1386 1387MADERA_MIXER_WIDGETS(DRC1L, "DRC1L"),1388MADERA_MIXER_WIDGETS(DRC1R, "DRC1R"),1389MADERA_MIXER_WIDGETS(DRC2L, "DRC2L"),1390MADERA_MIXER_WIDGETS(DRC2R, "DRC2R"),1391 1392SND_SOC_DAPM_SWITCH("DRC1 Activity Output", SND_SOC_NOPM, 0, 0,1393		    &madera_drc_activity_output_mux[0]),1394SND_SOC_DAPM_SWITCH("DRC2 Activity Output", SND_SOC_NOPM, 0, 0,1395		    &madera_drc_activity_output_mux[1]),1396 1397MADERA_MIXER_WIDGETS(LHPF1, "LHPF1"),1398MADERA_MIXER_WIDGETS(LHPF2, "LHPF2"),1399MADERA_MIXER_WIDGETS(LHPF3, "LHPF3"),1400MADERA_MIXER_WIDGETS(LHPF4, "LHPF4"),1401 1402MADERA_MIXER_WIDGETS(PWM1, "PWM1"),1403MADERA_MIXER_WIDGETS(PWM2, "PWM2"),1404 1405MADERA_MIXER_WIDGETS(OUT1L, "HPOUT1L"),1406MADERA_MIXER_WIDGETS(OUT1R, "HPOUT1R"),1407MADERA_MIXER_WIDGETS(OUT2L, "HPOUT2L"),1408MADERA_MIXER_WIDGETS(OUT2R, "HPOUT2R"),1409MADERA_MIXER_WIDGETS(OUT3L, "HPOUT3L"),1410MADERA_MIXER_WIDGETS(OUT3R, "HPOUT3R"),1411MADERA_MIXER_WIDGETS(SPKOUTL, "SPKOUTL"),1412MADERA_MIXER_WIDGETS(SPKOUTR, "SPKOUTR"),1413MADERA_MIXER_WIDGETS(SPKDAT1L, "SPKDAT1L"),1414MADERA_MIXER_WIDGETS(SPKDAT1R, "SPKDAT1R"),1415MADERA_MIXER_WIDGETS(SPKDAT2L, "SPKDAT2L"),1416MADERA_MIXER_WIDGETS(SPKDAT2R, "SPKDAT2R"),1417 1418MADERA_MIXER_WIDGETS(AIF1TX1, "AIF1TX1"),1419MADERA_MIXER_WIDGETS(AIF1TX2, "AIF1TX2"),1420MADERA_MIXER_WIDGETS(AIF1TX3, "AIF1TX3"),1421MADERA_MIXER_WIDGETS(AIF1TX4, "AIF1TX4"),1422MADERA_MIXER_WIDGETS(AIF1TX5, "AIF1TX5"),1423MADERA_MIXER_WIDGETS(AIF1TX6, "AIF1TX6"),1424MADERA_MIXER_WIDGETS(AIF1TX7, "AIF1TX7"),1425MADERA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8"),1426 1427MADERA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"),1428MADERA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),1429MADERA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"),1430MADERA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"),1431MADERA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"),1432MADERA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"),1433MADERA_MIXER_WIDGETS(AIF2TX7, "AIF2TX7"),1434MADERA_MIXER_WIDGETS(AIF2TX8, "AIF2TX8"),1435 1436MADERA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),1437MADERA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),1438 1439MADERA_MIXER_WIDGETS(AIF4TX1, "AIF4TX1"),1440MADERA_MIXER_WIDGETS(AIF4TX2, "AIF4TX2"),1441 1442MADERA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"),1443MADERA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"),1444MADERA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"),1445MADERA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"),1446MADERA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"),1447MADERA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"),1448MADERA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"),1449MADERA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"),1450 1451MADERA_MUX_WIDGETS(SPD1TX1, "SPDIF1TX1"),1452MADERA_MUX_WIDGETS(SPD1TX2, "SPDIF1TX2"),1453 1454MADERA_MUX_WIDGETS(ASRC1IN1L, "ASRC1IN1L"),1455MADERA_MUX_WIDGETS(ASRC1IN1R, "ASRC1IN1R"),1456MADERA_MUX_WIDGETS(ASRC1IN2L, "ASRC1IN2L"),1457MADERA_MUX_WIDGETS(ASRC1IN2R, "ASRC1IN2R"),1458MADERA_MUX_WIDGETS(ASRC2IN1L, "ASRC2IN1L"),1459MADERA_MUX_WIDGETS(ASRC2IN1R, "ASRC2IN1R"),1460MADERA_MUX_WIDGETS(ASRC2IN2L, "ASRC2IN2L"),1461MADERA_MUX_WIDGETS(ASRC2IN2R, "ASRC2IN2R"),1462 1463MADERA_DSP_WIDGETS(DSP1, "DSP1"),1464MADERA_DSP_WIDGETS(DSP2, "DSP2"),1465MADERA_DSP_WIDGETS(DSP3, "DSP3"),1466MADERA_DSP_WIDGETS(DSP4, "DSP4"),1467MADERA_DSP_WIDGETS(DSP5, "DSP5"),1468MADERA_DSP_WIDGETS(DSP6, "DSP6"),1469MADERA_DSP_WIDGETS(DSP7, "DSP7"),1470 1471SND_SOC_DAPM_SWITCH("DSP1 Trigger Output", SND_SOC_NOPM, 0, 0,1472		    &madera_dsp_trigger_output_mux[0]),1473SND_SOC_DAPM_SWITCH("DSP2 Trigger Output", SND_SOC_NOPM, 0, 0,1474		    &madera_dsp_trigger_output_mux[1]),1475SND_SOC_DAPM_SWITCH("DSP3 Trigger Output", SND_SOC_NOPM, 0, 0,1476		    &madera_dsp_trigger_output_mux[2]),1477SND_SOC_DAPM_SWITCH("DSP4 Trigger Output", SND_SOC_NOPM, 0, 0,1478		    &madera_dsp_trigger_output_mux[3]),1479SND_SOC_DAPM_SWITCH("DSP5 Trigger Output", SND_SOC_NOPM, 0, 0,1480		    &madera_dsp_trigger_output_mux[4]),1481SND_SOC_DAPM_SWITCH("DSP6 Trigger Output", SND_SOC_NOPM, 0, 0,1482		    &madera_dsp_trigger_output_mux[5]),1483SND_SOC_DAPM_SWITCH("DSP7 Trigger Output", SND_SOC_NOPM, 0, 0,1484		    &madera_dsp_trigger_output_mux[6]),1485 1486MADERA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),1487MADERA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),1488MADERA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"),1489MADERA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"),1490 1491MADERA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),1492MADERA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),1493MADERA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"),1494MADERA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"),1495 1496MADERA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),1497MADERA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),1498MADERA_MUX_WIDGETS(ISRC2DEC3, "ISRC2DEC3"),1499MADERA_MUX_WIDGETS(ISRC2DEC4, "ISRC2DEC4"),1500 1501MADERA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),1502MADERA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),1503MADERA_MUX_WIDGETS(ISRC2INT3, "ISRC2INT3"),1504MADERA_MUX_WIDGETS(ISRC2INT4, "ISRC2INT4"),1505 1506MADERA_MUX_WIDGETS(ISRC3DEC1, "ISRC3DEC1"),1507MADERA_MUX_WIDGETS(ISRC3DEC2, "ISRC3DEC2"),1508 1509MADERA_MUX_WIDGETS(ISRC3INT1, "ISRC3INT1"),1510MADERA_MUX_WIDGETS(ISRC3INT2, "ISRC3INT2"),1511 1512MADERA_MUX_WIDGETS(ISRC4DEC1, "ISRC4DEC1"),1513MADERA_MUX_WIDGETS(ISRC4DEC2, "ISRC4DEC2"),1514 1515MADERA_MUX_WIDGETS(ISRC4INT1, "ISRC4INT1"),1516MADERA_MUX_WIDGETS(ISRC4INT2, "ISRC4INT2"),1517 1518SND_SOC_DAPM_OUTPUT("HPOUT1L"),1519SND_SOC_DAPM_OUTPUT("HPOUT1R"),1520SND_SOC_DAPM_OUTPUT("HPOUT2L"),1521SND_SOC_DAPM_OUTPUT("HPOUT2R"),1522SND_SOC_DAPM_OUTPUT("HPOUT3L"),1523SND_SOC_DAPM_OUTPUT("HPOUT3R"),1524SND_SOC_DAPM_OUTPUT("SPKOUTLN"),1525SND_SOC_DAPM_OUTPUT("SPKOUTLP"),1526SND_SOC_DAPM_OUTPUT("SPKOUTRN"),1527SND_SOC_DAPM_OUTPUT("SPKOUTRP"),1528SND_SOC_DAPM_OUTPUT("SPKDAT1L"),1529SND_SOC_DAPM_OUTPUT("SPKDAT1R"),1530SND_SOC_DAPM_OUTPUT("SPKDAT2L"),1531SND_SOC_DAPM_OUTPUT("SPKDAT2R"),1532SND_SOC_DAPM_OUTPUT("SPDIF1"),1533 1534SND_SOC_DAPM_OUTPUT("MICSUPP"),1535};1536 1537#define MADERA_MIXER_INPUT_ROUTES(name)	\1538	{ name, "Noise Generator", "Noise Generator" }, \1539	{ name, "Tone Generator 1", "Tone Generator 1" }, \1540	{ name, "Tone Generator 2", "Tone Generator 2" }, \1541	{ name, "Haptics", "HAPTICS" }, \1542	{ name, "AEC1", "AEC1 Loopback" }, \1543	{ name, "AEC2", "AEC2 Loopback" }, \1544	{ name, "IN1L", "IN1L" }, \1545	{ name, "IN1R", "IN1R" }, \1546	{ name, "IN2L", "IN2L" }, \1547	{ name, "IN2R", "IN2R" }, \1548	{ name, "IN3L", "IN3L" }, \1549	{ name, "IN3R", "IN3R" }, \1550	{ name, "IN4L", "IN4L" }, \1551	{ name, "IN4R", "IN4R" }, \1552	{ name, "IN5L", "IN5L" }, \1553	{ name, "IN5R", "IN5R" }, \1554	{ name, "IN6L", "IN6L" }, \1555	{ name, "IN6R", "IN6R" }, \1556	{ name, "AIF1RX1", "AIF1RX1" }, \1557	{ name, "AIF1RX2", "AIF1RX2" }, \1558	{ name, "AIF1RX3", "AIF1RX3" }, \1559	{ name, "AIF1RX4", "AIF1RX4" }, \1560	{ name, "AIF1RX5", "AIF1RX5" }, \1561	{ name, "AIF1RX6", "AIF1RX6" }, \1562	{ name, "AIF1RX7", "AIF1RX7" }, \1563	{ name, "AIF1RX8", "AIF1RX8" }, \1564	{ name, "AIF2RX1", "AIF2RX1" }, \1565	{ name, "AIF2RX2", "AIF2RX2" }, \1566	{ name, "AIF2RX3", "AIF2RX3" }, \1567	{ name, "AIF2RX4", "AIF2RX4" }, \1568	{ name, "AIF2RX5", "AIF2RX5" }, \1569	{ name, "AIF2RX6", "AIF2RX6" }, \1570	{ name, "AIF2RX7", "AIF2RX7" }, \1571	{ name, "AIF2RX8", "AIF2RX8" }, \1572	{ name, "AIF3RX1", "AIF3RX1" }, \1573	{ name, "AIF3RX2", "AIF3RX2" }, \1574	{ name, "AIF4RX1", "AIF4RX1" }, \1575	{ name, "AIF4RX2", "AIF4RX2" }, \1576	{ name, "SLIMRX1", "SLIMRX1" }, \1577	{ name, "SLIMRX2", "SLIMRX2" }, \1578	{ name, "SLIMRX3", "SLIMRX3" }, \1579	{ name, "SLIMRX4", "SLIMRX4" }, \1580	{ name, "SLIMRX5", "SLIMRX5" }, \1581	{ name, "SLIMRX6", "SLIMRX6" }, \1582	{ name, "SLIMRX7", "SLIMRX7" }, \1583	{ name, "SLIMRX8", "SLIMRX8" }, \1584	{ name, "EQ1", "EQ1" }, \1585	{ name, "EQ2", "EQ2" }, \1586	{ name, "EQ3", "EQ3" }, \1587	{ name, "EQ4", "EQ4" }, \1588	{ name, "DRC1L", "DRC1L" }, \1589	{ name, "DRC1R", "DRC1R" }, \1590	{ name, "DRC2L", "DRC2L" }, \1591	{ name, "DRC2R", "DRC2R" }, \1592	{ name, "LHPF1", "LHPF1" }, \1593	{ name, "LHPF2", "LHPF2" }, \1594	{ name, "LHPF3", "LHPF3" }, \1595	{ name, "LHPF4", "LHPF4" }, \1596	{ name, "ASRC1IN1L", "ASRC1IN1L" }, \1597	{ name, "ASRC1IN1R", "ASRC1IN1R" }, \1598	{ name, "ASRC1IN2L", "ASRC1IN2L" }, \1599	{ name, "ASRC1IN2R", "ASRC1IN2R" }, \1600	{ name, "ASRC2IN1L", "ASRC2IN1L" }, \1601	{ name, "ASRC2IN1R", "ASRC2IN1R" }, \1602	{ name, "ASRC2IN2L", "ASRC2IN2L" }, \1603	{ name, "ASRC2IN2R", "ASRC2IN2R" }, \1604	{ name, "ISRC1DEC1", "ISRC1DEC1" }, \1605	{ name, "ISRC1DEC2", "ISRC1DEC2" }, \1606	{ name, "ISRC1DEC3", "ISRC1DEC3" }, \1607	{ name, "ISRC1DEC4", "ISRC1DEC4" }, \1608	{ name, "ISRC1INT1", "ISRC1INT1" }, \1609	{ name, "ISRC1INT2", "ISRC1INT2" }, \1610	{ name, "ISRC1INT3", "ISRC1INT3" }, \1611	{ name, "ISRC1INT4", "ISRC1INT4" }, \1612	{ name, "ISRC2DEC1", "ISRC2DEC1" }, \1613	{ name, "ISRC2DEC2", "ISRC2DEC2" }, \1614	{ name, "ISRC2DEC3", "ISRC2DEC3" }, \1615	{ name, "ISRC2DEC4", "ISRC2DEC4" }, \1616	{ name, "ISRC2INT1", "ISRC2INT1" }, \1617	{ name, "ISRC2INT2", "ISRC2INT2" }, \1618	{ name, "ISRC2INT3", "ISRC2INT3" }, \1619	{ name, "ISRC2INT4", "ISRC2INT4" }, \1620	{ name, "ISRC3DEC1", "ISRC3DEC1" }, \1621	{ name, "ISRC3DEC2", "ISRC3DEC2" }, \1622	{ name, "ISRC3INT1", "ISRC3INT1" }, \1623	{ name, "ISRC3INT2", "ISRC3INT2" }, \1624	{ name, "ISRC4DEC1", "ISRC4DEC1" }, \1625	{ name, "ISRC4DEC2", "ISRC4DEC2" }, \1626	{ name, "ISRC4INT1", "ISRC4INT1" }, \1627	{ name, "ISRC4INT2", "ISRC4INT2" }, \1628	{ name, "DSP1.1", "DSP1" }, \1629	{ name, "DSP1.2", "DSP1" }, \1630	{ name, "DSP1.3", "DSP1" }, \1631	{ name, "DSP1.4", "DSP1" }, \1632	{ name, "DSP1.5", "DSP1" }, \1633	{ name, "DSP1.6", "DSP1" }, \1634	{ name, "DSP2.1", "DSP2" }, \1635	{ name, "DSP2.2", "DSP2" }, \1636	{ name, "DSP2.3", "DSP2" }, \1637	{ name, "DSP2.4", "DSP2" }, \1638	{ name, "DSP2.5", "DSP2" }, \1639	{ name, "DSP2.6", "DSP2" }, \1640	{ name, "DSP3.1", "DSP3" }, \1641	{ name, "DSP3.2", "DSP3" }, \1642	{ name, "DSP3.3", "DSP3" }, \1643	{ name, "DSP3.4", "DSP3" }, \1644	{ name, "DSP3.5", "DSP3" }, \1645	{ name, "DSP3.6", "DSP3" }, \1646	{ name, "DSP4.1", "DSP4" }, \1647	{ name, "DSP4.2", "DSP4" }, \1648	{ name, "DSP4.3", "DSP4" }, \1649	{ name, "DSP4.4", "DSP4" }, \1650	{ name, "DSP4.5", "DSP4" }, \1651	{ name, "DSP4.6", "DSP4" }, \1652	{ name, "DSP5.1", "DSP5" }, \1653	{ name, "DSP5.2", "DSP5" }, \1654	{ name, "DSP5.3", "DSP5" }, \1655	{ name, "DSP5.4", "DSP5" }, \1656	{ name, "DSP5.5", "DSP5" }, \1657	{ name, "DSP5.6", "DSP5" }, \1658	{ name, "DSP6.1", "DSP6" }, \1659	{ name, "DSP6.2", "DSP6" }, \1660	{ name, "DSP6.3", "DSP6" }, \1661	{ name, "DSP6.4", "DSP6" }, \1662	{ name, "DSP6.5", "DSP6" }, \1663	{ name, "DSP6.6", "DSP6" }, \1664	{ name, "DSP7.1", "DSP7" }, \1665	{ name, "DSP7.2", "DSP7" }, \1666	{ name, "DSP7.3", "DSP7" }, \1667	{ name, "DSP7.4", "DSP7" }, \1668	{ name, "DSP7.5", "DSP7" }, \1669	{ name, "DSP7.6", "DSP7" }1670 1671static const struct snd_soc_dapm_route cs47l85_dapm_routes[] = {1672	/* Internal clock domains */1673	{ "EQ1", NULL, "FXCLK" },1674	{ "EQ2", NULL, "FXCLK" },1675	{ "EQ3", NULL, "FXCLK" },1676	{ "EQ4", NULL, "FXCLK" },1677	{ "DRC1L", NULL, "FXCLK" },1678	{ "DRC1R", NULL, "FXCLK" },1679	{ "DRC2L", NULL, "FXCLK" },1680	{ "DRC2R", NULL, "FXCLK" },1681	{ "LHPF1", NULL, "FXCLK" },1682	{ "LHPF2", NULL, "FXCLK" },1683	{ "LHPF3", NULL, "FXCLK" },1684	{ "LHPF4", NULL, "FXCLK" },1685	{ "PWM1 Mixer", NULL, "PWMCLK" },1686	{ "PWM2 Mixer", NULL, "PWMCLK" },1687	{ "OUT1L", NULL, "OUTCLK" },1688	{ "OUT1R", NULL, "OUTCLK" },1689	{ "OUT2L", NULL, "OUTCLK" },1690	{ "OUT2R", NULL, "OUTCLK" },1691	{ "OUT3L", NULL, "OUTCLK" },1692	{ "OUT3R", NULL, "OUTCLK" },1693	{ "OUT4L", NULL, "OUTCLK" },1694	{ "OUT4R", NULL, "OUTCLK" },1695	{ "OUT5L", NULL, "OUTCLK" },1696	{ "OUT5R", NULL, "OUTCLK" },1697	{ "OUT6L", NULL, "OUTCLK" },1698	{ "OUT6R", NULL, "OUTCLK" },1699	{ "AIF1TX1", NULL, "AIF1TXCLK" },1700	{ "AIF1TX2", NULL, "AIF1TXCLK" },1701	{ "AIF1TX3", NULL, "AIF1TXCLK" },1702	{ "AIF1TX4", NULL, "AIF1TXCLK" },1703	{ "AIF1TX5", NULL, "AIF1TXCLK" },1704	{ "AIF1TX6", NULL, "AIF1TXCLK" },1705	{ "AIF1TX7", NULL, "AIF1TXCLK" },1706	{ "AIF1TX8", NULL, "AIF1TXCLK" },1707	{ "AIF2TX1", NULL, "AIF2TXCLK" },1708	{ "AIF2TX2", NULL, "AIF2TXCLK" },1709	{ "AIF2TX3", NULL, "AIF2TXCLK" },1710	{ "AIF2TX4", NULL, "AIF2TXCLK" },1711	{ "AIF2TX5", NULL, "AIF2TXCLK" },1712	{ "AIF2TX6", NULL, "AIF2TXCLK" },1713	{ "AIF2TX7", NULL, "AIF2TXCLK" },1714	{ "AIF2TX8", NULL, "AIF2TXCLK" },1715	{ "AIF3TX1", NULL, "AIF3TXCLK" },1716	{ "AIF3TX2", NULL, "AIF3TXCLK" },1717	{ "AIF4TX1", NULL, "AIF4TXCLK" },1718	{ "AIF4TX2", NULL, "AIF4TXCLK" },1719	{ "SLIMTX1", NULL, "SLIMBUSCLK" },1720	{ "SLIMTX2", NULL, "SLIMBUSCLK" },1721	{ "SLIMTX3", NULL, "SLIMBUSCLK" },1722	{ "SLIMTX4", NULL, "SLIMBUSCLK" },1723	{ "SLIMTX5", NULL, "SLIMBUSCLK" },1724	{ "SLIMTX6", NULL, "SLIMBUSCLK" },1725	{ "SLIMTX7", NULL, "SLIMBUSCLK" },1726	{ "SLIMTX8", NULL, "SLIMBUSCLK" },1727	{ "SPD1TX1", NULL, "SPDCLK" },1728	{ "SPD1TX2", NULL, "SPDCLK" },1729	{ "DSP1", NULL, "DSP1CLK" },1730	{ "DSP2", NULL, "DSP2CLK" },1731	{ "DSP3", NULL, "DSP3CLK" },1732	{ "DSP4", NULL, "DSP4CLK" },1733	{ "DSP5", NULL, "DSP5CLK" },1734	{ "DSP6", NULL, "DSP6CLK" },1735	{ "DSP7", NULL, "DSP7CLK" },1736	{ "ISRC1DEC1", NULL, "ISRC1CLK" },1737	{ "ISRC1DEC2", NULL, "ISRC1CLK" },1738	{ "ISRC1DEC3", NULL, "ISRC1CLK" },1739	{ "ISRC1DEC4", NULL, "ISRC1CLK" },1740	{ "ISRC1INT1", NULL, "ISRC1CLK" },1741	{ "ISRC1INT2", NULL, "ISRC1CLK" },1742	{ "ISRC1INT3", NULL, "ISRC1CLK" },1743	{ "ISRC1INT4", NULL, "ISRC1CLK" },1744	{ "ISRC2DEC1", NULL, "ISRC2CLK" },1745	{ "ISRC2DEC2", NULL, "ISRC2CLK" },1746	{ "ISRC2DEC3", NULL, "ISRC2CLK" },1747	{ "ISRC2DEC4", NULL, "ISRC2CLK" },1748	{ "ISRC2INT1", NULL, "ISRC2CLK" },1749	{ "ISRC2INT2", NULL, "ISRC2CLK" },1750	{ "ISRC2INT3", NULL, "ISRC2CLK" },1751	{ "ISRC2INT4", NULL, "ISRC2CLK" },1752	{ "ISRC3DEC1", NULL, "ISRC3CLK" },1753	{ "ISRC3DEC2", NULL, "ISRC3CLK" },1754	{ "ISRC3INT1", NULL, "ISRC3CLK" },1755	{ "ISRC3INT2", NULL, "ISRC3CLK" },1756	{ "ISRC4DEC1", NULL, "ISRC4CLK" },1757	{ "ISRC4DEC2", NULL, "ISRC4CLK" },1758	{ "ISRC4INT1", NULL, "ISRC4CLK" },1759	{ "ISRC4INT2", NULL, "ISRC4CLK" },1760	{ "ASRC1IN1L", NULL, "ASRC1CLK" },1761	{ "ASRC1IN1R", NULL, "ASRC1CLK" },1762	{ "ASRC1IN2L", NULL, "ASRC1CLK" },1763	{ "ASRC1IN2R", NULL, "ASRC1CLK" },1764	{ "ASRC2IN1L", NULL, "ASRC2CLK" },1765	{ "ASRC2IN1R", NULL, "ASRC2CLK" },1766	{ "ASRC2IN2L", NULL, "ASRC2CLK" },1767	{ "ASRC2IN2R", NULL, "ASRC2CLK" },1768 1769	{ "AIF2 Capture", NULL, "DBVDD2" },1770	{ "AIF2 Playback", NULL, "DBVDD2" },1771 1772	{ "AIF3 Capture", NULL, "DBVDD3" },1773	{ "AIF3 Playback", NULL, "DBVDD3" },1774 1775	{ "AIF4 Capture", NULL, "DBVDD3" },1776	{ "AIF4 Playback", NULL, "DBVDD3" },1777 1778	{ "OUT1L", NULL, "CPVDD1" },1779	{ "OUT1L", NULL, "CPVDD2" },1780	{ "OUT1R", NULL, "CPVDD1" },1781	{ "OUT1R", NULL, "CPVDD2" },1782	{ "OUT2L", NULL, "CPVDD1" },1783	{ "OUT2L", NULL, "CPVDD2" },1784	{ "OUT2R", NULL, "CPVDD1" },1785	{ "OUT2R", NULL, "CPVDD2" },1786	{ "OUT3L", NULL, "CPVDD1" },1787	{ "OUT3L", NULL, "CPVDD2" },1788	{ "OUT3R", NULL, "CPVDD1" },1789	{ "OUT3R", NULL, "CPVDD2" },1790 1791	{ "OUT4L", NULL, "SPKVDDL" },1792	{ "OUT4R", NULL, "SPKVDDR" },1793 1794	{ "OUT1L", NULL, "SYSCLK" },1795	{ "OUT1R", NULL, "SYSCLK" },1796	{ "OUT2L", NULL, "SYSCLK" },1797	{ "OUT2R", NULL, "SYSCLK" },1798	{ "OUT3L", NULL, "SYSCLK" },1799	{ "OUT3R", NULL, "SYSCLK" },1800	{ "OUT4L", NULL, "SYSCLK" },1801	{ "OUT4R", NULL, "SYSCLK" },1802	{ "OUT5L", NULL, "SYSCLK" },1803	{ "OUT5R", NULL, "SYSCLK" },1804	{ "OUT6L", NULL, "SYSCLK" },1805	{ "OUT6R", NULL, "SYSCLK" },1806 1807	{ "SPD1", NULL, "SYSCLK" },1808	{ "SPD1", NULL, "SPD1TX1" },1809	{ "SPD1", NULL, "SPD1TX2" },1810 1811	{ "IN1L", NULL, "SYSCLK" },1812	{ "IN1R", NULL, "SYSCLK" },1813	{ "IN2L", NULL, "SYSCLK" },1814	{ "IN2R", NULL, "SYSCLK" },1815	{ "IN3L", NULL, "SYSCLK" },1816	{ "IN3R", NULL, "SYSCLK" },1817	{ "IN4L", NULL, "SYSCLK" },1818	{ "IN4R", NULL, "SYSCLK" },1819	{ "IN5L", NULL, "SYSCLK" },1820	{ "IN5R", NULL, "SYSCLK" },1821	{ "IN6L", NULL, "SYSCLK" },1822	{ "IN6R", NULL, "SYSCLK" },1823 1824	{ "IN4L", NULL, "DBVDD4" },1825	{ "IN4R", NULL, "DBVDD4" },1826	{ "IN5L", NULL, "DBVDD4" },1827	{ "IN5R", NULL, "DBVDD4" },1828	{ "IN6L", NULL, "DBVDD4" },1829	{ "IN6R", NULL, "DBVDD4" },1830 1831	{ "ASRC1IN1L", NULL, "SYSCLK" },1832	{ "ASRC1IN1R", NULL, "SYSCLK" },1833	{ "ASRC1IN2L", NULL, "SYSCLK" },1834	{ "ASRC1IN2R", NULL, "SYSCLK" },1835	{ "ASRC2IN1L", NULL, "SYSCLK" },1836	{ "ASRC2IN1R", NULL, "SYSCLK" },1837	{ "ASRC2IN2L", NULL, "SYSCLK" },1838	{ "ASRC2IN2R", NULL, "SYSCLK" },1839 1840	{ "ASRC1IN1L", NULL, "ASYNCCLK" },1841	{ "ASRC1IN1R", NULL, "ASYNCCLK" },1842	{ "ASRC1IN2L", NULL, "ASYNCCLK" },1843	{ "ASRC1IN2R", NULL, "ASYNCCLK" },1844	{ "ASRC2IN1L", NULL, "ASYNCCLK" },1845	{ "ASRC2IN1R", NULL, "ASYNCCLK" },1846	{ "ASRC2IN2L", NULL, "ASYNCCLK" },1847	{ "ASRC2IN2R", NULL, "ASYNCCLK" },1848 1849	{ "MICBIAS1", NULL, "MICVDD" },1850	{ "MICBIAS2", NULL, "MICVDD" },1851	{ "MICBIAS3", NULL, "MICVDD" },1852	{ "MICBIAS4", NULL, "MICVDD" },1853 1854	{ "Noise Generator", NULL, "SYSCLK" },1855	{ "Tone Generator 1", NULL, "SYSCLK" },1856	{ "Tone Generator 2", NULL, "SYSCLK" },1857 1858	{ "Noise Generator", NULL, "NOISE" },1859	{ "Tone Generator 1", NULL, "TONE" },1860	{ "Tone Generator 2", NULL, "TONE" },1861 1862	{ "AIF1 Capture", NULL, "AIF1TX1" },1863	{ "AIF1 Capture", NULL, "AIF1TX2" },1864	{ "AIF1 Capture", NULL, "AIF1TX3" },1865	{ "AIF1 Capture", NULL, "AIF1TX4" },1866	{ "AIF1 Capture", NULL, "AIF1TX5" },1867	{ "AIF1 Capture", NULL, "AIF1TX6" },1868	{ "AIF1 Capture", NULL, "AIF1TX7" },1869	{ "AIF1 Capture", NULL, "AIF1TX8" },1870 1871	{ "AIF1RX1", NULL, "AIF1 Playback" },1872	{ "AIF1RX2", NULL, "AIF1 Playback" },1873	{ "AIF1RX3", NULL, "AIF1 Playback" },1874	{ "AIF1RX4", NULL, "AIF1 Playback" },1875	{ "AIF1RX5", NULL, "AIF1 Playback" },1876	{ "AIF1RX6", NULL, "AIF1 Playback" },1877	{ "AIF1RX7", NULL, "AIF1 Playback" },1878	{ "AIF1RX8", NULL, "AIF1 Playback" },1879 1880	{ "AIF2 Capture", NULL, "AIF2TX1" },1881	{ "AIF2 Capture", NULL, "AIF2TX2" },1882	{ "AIF2 Capture", NULL, "AIF2TX3" },1883	{ "AIF2 Capture", NULL, "AIF2TX4" },1884	{ "AIF2 Capture", NULL, "AIF2TX5" },1885	{ "AIF2 Capture", NULL, "AIF2TX6" },1886	{ "AIF2 Capture", NULL, "AIF2TX7" },1887	{ "AIF2 Capture", NULL, "AIF2TX8" },1888 1889	{ "AIF2RX1", NULL, "AIF2 Playback" },1890	{ "AIF2RX2", NULL, "AIF2 Playback" },1891	{ "AIF2RX3", NULL, "AIF2 Playback" },1892	{ "AIF2RX4", NULL, "AIF2 Playback" },1893	{ "AIF2RX5", NULL, "AIF2 Playback" },1894	{ "AIF2RX6", NULL, "AIF2 Playback" },1895	{ "AIF2RX7", NULL, "AIF2 Playback" },1896	{ "AIF2RX8", NULL, "AIF2 Playback" },1897 1898	{ "AIF3 Capture", NULL, "AIF3TX1" },1899	{ "AIF3 Capture", NULL, "AIF3TX2" },1900 1901	{ "AIF3RX1", NULL, "AIF3 Playback" },1902	{ "AIF3RX2", NULL, "AIF3 Playback" },1903 1904	{ "AIF4 Capture", NULL, "AIF4TX1" },1905	{ "AIF4 Capture", NULL, "AIF4TX2" },1906 1907	{ "AIF4RX1", NULL, "AIF4 Playback" },1908	{ "AIF4RX2", NULL, "AIF4 Playback" },1909 1910	{ "Slim1 Capture", NULL, "SLIMTX1" },1911	{ "Slim1 Capture", NULL, "SLIMTX2" },1912	{ "Slim1 Capture", NULL, "SLIMTX3" },1913	{ "Slim1 Capture", NULL, "SLIMTX4" },1914 1915	{ "SLIMRX1", NULL, "Slim1 Playback" },1916	{ "SLIMRX2", NULL, "Slim1 Playback" },1917	{ "SLIMRX3", NULL, "Slim1 Playback" },1918	{ "SLIMRX4", NULL, "Slim1 Playback" },1919 1920	{ "Slim2 Capture", NULL, "SLIMTX5" },1921	{ "Slim2 Capture", NULL, "SLIMTX6" },1922 1923	{ "SLIMRX5", NULL, "Slim2 Playback" },1924	{ "SLIMRX6", NULL, "Slim2 Playback" },1925 1926	{ "Slim3 Capture", NULL, "SLIMTX7" },1927	{ "Slim3 Capture", NULL, "SLIMTX8" },1928 1929	{ "SLIMRX7", NULL, "Slim3 Playback" },1930	{ "SLIMRX8", NULL, "Slim3 Playback" },1931 1932	{ "AIF1 Playback", NULL, "SYSCLK" },1933	{ "AIF2 Playback", NULL, "SYSCLK" },1934	{ "AIF3 Playback", NULL, "SYSCLK" },1935	{ "AIF4 Playback", NULL, "SYSCLK" },1936	{ "Slim1 Playback", NULL, "SYSCLK" },1937	{ "Slim2 Playback", NULL, "SYSCLK" },1938	{ "Slim3 Playback", NULL, "SYSCLK" },1939 1940	{ "AIF1 Capture", NULL, "SYSCLK" },1941	{ "AIF2 Capture", NULL, "SYSCLK" },1942	{ "AIF3 Capture", NULL, "SYSCLK" },1943	{ "AIF4 Capture", NULL, "SYSCLK" },1944	{ "Slim1 Capture", NULL, "SYSCLK" },1945	{ "Slim2 Capture", NULL, "SYSCLK" },1946	{ "Slim3 Capture", NULL, "SYSCLK" },1947 1948	{ "Voice Control DSP", NULL, "DSP6" },1949 1950	{ "Audio Trace DSP", NULL, "DSP1" },1951 1952	{ "IN1L Analog Mux", "A", "IN1ALN" },1953	{ "IN1L Analog Mux", "A", "IN1ALP" },1954	{ "IN1L Analog Mux", "B", "IN1BN" },1955	{ "IN1L Analog Mux", "B", "IN1BP" },1956 1957	{ "IN1L Mode", "Analog", "IN1L Analog Mux" },1958	{ "IN1R Mode", "Analog", "IN1RN" },1959	{ "IN1R Mode", "Analog", "IN1RP" },1960 1961	{ "IN1L Mode", "Digital", "IN1ALN" },1962	{ "IN1L Mode", "Digital", "IN1RN" },1963	{ "IN1R Mode", "Digital", "IN1ALN" },1964	{ "IN1R Mode", "Digital", "IN1RN" },1965 1966	{ "IN1L", NULL, "IN1L Mode" },1967	{ "IN1R", NULL, "IN1R Mode" },1968 1969	{ "IN2L Analog Mux", "A", "IN2ALN" },1970	{ "IN2L Analog Mux", "A", "IN2ALP" },1971	{ "IN2L Analog Mux", "B", "IN2BLN" },1972	{ "IN2L Analog Mux", "B", "IN2BLP" },1973	{ "IN2R Analog Mux", "A", "IN2ARN" },1974	{ "IN2R Analog Mux", "A", "IN2ARP" },1975	{ "IN2R Analog Mux", "B", "IN2BRN" },1976	{ "IN2R Analog Mux", "B", "IN2BRP" },1977 1978	{ "IN2L Mode", "Analog", "IN2L Analog Mux" },1979	{ "IN2R Mode", "Analog", "IN2R Analog Mux" },1980 1981	{ "IN2L Mode", "Digital", "IN2ALN" },1982	{ "IN2L Mode", "Digital", "IN2ARN" },1983	{ "IN2R Mode", "Digital", "IN2ALN" },1984	{ "IN2R Mode", "Digital", "IN2ARN" },1985 1986	{ "IN2L", NULL, "IN2L Mode" },1987	{ "IN2R", NULL, "IN2R Mode" },1988 1989	{ "IN3L Mode", "Analog", "IN3LN" },1990	{ "IN3L Mode", "Analog", "IN3LP" },1991	{ "IN3R Mode", "Analog", "IN3RN" },1992	{ "IN3R Mode", "Analog", "IN3RP" },1993 1994	{ "IN3L Mode", "Digital", "IN3LN" },1995	{ "IN3L Mode", "Digital", "IN3RN" },1996	{ "IN3R Mode", "Digital", "IN3LN" },1997	{ "IN3R Mode", "Digital", "IN3RN" },1998 1999	{ "IN3L", NULL, "IN3L Mode" },2000	{ "IN3R", NULL, "IN3R Mode" },2001 2002	{ "IN4L", NULL, "DMICCLK4" },2003	{ "IN4L", NULL, "DMICDAT4" },2004	{ "IN4R", NULL, "DMICCLK4" },2005	{ "IN4R", NULL, "DMICDAT4" },2006 2007	{ "IN5L", NULL, "DMICCLK5" },2008	{ "IN5L", NULL, "DMICDAT5" },2009	{ "IN5R", NULL, "DMICCLK5" },2010	{ "IN5R", NULL, "DMICDAT5" },2011 2012	{ "IN6L", NULL, "DMICCLK6" },2013	{ "IN6L", NULL, "DMICDAT6" },2014	{ "IN6R", NULL, "DMICCLK6" },2015	{ "IN6R", NULL, "DMICDAT6" },2016 2017	MADERA_MIXER_ROUTES("OUT1L", "HPOUT1L"),2018	MADERA_MIXER_ROUTES("OUT1R", "HPOUT1R"),2019	MADERA_MIXER_ROUTES("OUT2L", "HPOUT2L"),2020	MADERA_MIXER_ROUTES("OUT2R", "HPOUT2R"),2021	MADERA_MIXER_ROUTES("OUT3L", "HPOUT3L"),2022	MADERA_MIXER_ROUTES("OUT3R", "HPOUT3R"),2023 2024	MADERA_MIXER_ROUTES("OUT4L", "SPKOUTL"),2025	MADERA_MIXER_ROUTES("OUT4R", "SPKOUTR"),2026	MADERA_MIXER_ROUTES("OUT5L", "SPKDAT1L"),2027	MADERA_MIXER_ROUTES("OUT5R", "SPKDAT1R"),2028	MADERA_MIXER_ROUTES("OUT6L", "SPKDAT2L"),2029	MADERA_MIXER_ROUTES("OUT6R", "SPKDAT2R"),2030 2031	MADERA_MIXER_ROUTES("PWM1 Driver", "PWM1"),2032	MADERA_MIXER_ROUTES("PWM2 Driver", "PWM2"),2033 2034	MADERA_MIXER_ROUTES("AIF1TX1", "AIF1TX1"),2035	MADERA_MIXER_ROUTES("AIF1TX2", "AIF1TX2"),2036	MADERA_MIXER_ROUTES("AIF1TX3", "AIF1TX3"),2037	MADERA_MIXER_ROUTES("AIF1TX4", "AIF1TX4"),2038	MADERA_MIXER_ROUTES("AIF1TX5", "AIF1TX5"),2039	MADERA_MIXER_ROUTES("AIF1TX6", "AIF1TX6"),2040	MADERA_MIXER_ROUTES("AIF1TX7", "AIF1TX7"),2041	MADERA_MIXER_ROUTES("AIF1TX8", "AIF1TX8"),2042 2043	MADERA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"),2044	MADERA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"),2045	MADERA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"),2046	MADERA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"),2047	MADERA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"),2048	MADERA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"),2049	MADERA_MIXER_ROUTES("AIF2TX7", "AIF2TX7"),2050	MADERA_MIXER_ROUTES("AIF2TX8", "AIF2TX8"),2051 2052	MADERA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),2053	MADERA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),2054 2055	MADERA_MIXER_ROUTES("AIF4TX1", "AIF4TX1"),2056	MADERA_MIXER_ROUTES("AIF4TX2", "AIF4TX2"),2057 2058	MADERA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"),2059	MADERA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"),2060	MADERA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"),2061	MADERA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"),2062	MADERA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"),2063	MADERA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"),2064	MADERA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"),2065	MADERA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"),2066 2067	MADERA_MUX_ROUTES("SPD1TX1", "SPDIF1TX1"),2068	MADERA_MUX_ROUTES("SPD1TX2", "SPDIF1TX2"),2069 2070	MADERA_MIXER_ROUTES("EQ1", "EQ1"),2071	MADERA_MIXER_ROUTES("EQ2", "EQ2"),2072	MADERA_MIXER_ROUTES("EQ3", "EQ3"),2073	MADERA_MIXER_ROUTES("EQ4", "EQ4"),2074 2075	MADERA_MIXER_ROUTES("DRC1L", "DRC1L"),2076	MADERA_MIXER_ROUTES("DRC1R", "DRC1R"),2077	MADERA_MIXER_ROUTES("DRC2L", "DRC2L"),2078	MADERA_MIXER_ROUTES("DRC2R", "DRC2R"),2079 2080	MADERA_MIXER_ROUTES("LHPF1", "LHPF1"),2081	MADERA_MIXER_ROUTES("LHPF2", "LHPF2"),2082	MADERA_MIXER_ROUTES("LHPF3", "LHPF3"),2083	MADERA_MIXER_ROUTES("LHPF4", "LHPF4"),2084 2085	MADERA_MUX_ROUTES("ASRC1IN1L", "ASRC1IN1L"),2086	MADERA_MUX_ROUTES("ASRC1IN1R", "ASRC1IN1R"),2087	MADERA_MUX_ROUTES("ASRC1IN2L", "ASRC1IN2L"),2088	MADERA_MUX_ROUTES("ASRC1IN2R", "ASRC1IN2R"),2089	MADERA_MUX_ROUTES("ASRC2IN1L", "ASRC2IN1L"),2090	MADERA_MUX_ROUTES("ASRC2IN1R", "ASRC2IN1R"),2091	MADERA_MUX_ROUTES("ASRC2IN2L", "ASRC2IN2L"),2092	MADERA_MUX_ROUTES("ASRC2IN2R", "ASRC2IN2R"),2093 2094	MADERA_DSP_ROUTES("DSP1"),2095	MADERA_DSP_ROUTES("DSP2"),2096	MADERA_DSP_ROUTES("DSP3"),2097	MADERA_DSP_ROUTES("DSP4"),2098	MADERA_DSP_ROUTES("DSP5"),2099	MADERA_DSP_ROUTES("DSP6"),2100	MADERA_DSP_ROUTES("DSP7"),2101 2102	{ "DSP Trigger Out", NULL, "DSP1 Trigger Output" },2103	{ "DSP Trigger Out", NULL, "DSP2 Trigger Output" },2104	{ "DSP Trigger Out", NULL, "DSP3 Trigger Output" },2105	{ "DSP Trigger Out", NULL, "DSP4 Trigger Output" },2106	{ "DSP Trigger Out", NULL, "DSP5 Trigger Output" },2107	{ "DSP Trigger Out", NULL, "DSP6 Trigger Output" },2108	{ "DSP Trigger Out", NULL, "DSP7 Trigger Output" },2109 2110	{ "DSP1 Trigger Output", "Switch", "DSP1" },2111	{ "DSP2 Trigger Output", "Switch", "DSP2" },2112	{ "DSP3 Trigger Output", "Switch", "DSP3" },2113	{ "DSP4 Trigger Output", "Switch", "DSP4" },2114	{ "DSP5 Trigger Output", "Switch", "DSP5" },2115	{ "DSP6 Trigger Output", "Switch", "DSP6" },2116	{ "DSP7 Trigger Output", "Switch", "DSP7" },2117 2118	MADERA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"),2119	MADERA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"),2120	MADERA_MUX_ROUTES("ISRC1INT3", "ISRC1INT3"),2121	MADERA_MUX_ROUTES("ISRC1INT4", "ISRC1INT4"),2122 2123	MADERA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"),2124	MADERA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"),2125	MADERA_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"),2126	MADERA_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"),2127 2128	MADERA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"),2129	MADERA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"),2130	MADERA_MUX_ROUTES("ISRC2INT3", "ISRC2INT3"),2131	MADERA_MUX_ROUTES("ISRC2INT4", "ISRC2INT4"),2132 2133	MADERA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"),2134	MADERA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"),2135	MADERA_MUX_ROUTES("ISRC2DEC3", "ISRC2DEC3"),2136	MADERA_MUX_ROUTES("ISRC2DEC4", "ISRC2DEC4"),2137 2138	MADERA_MUX_ROUTES("ISRC3INT1", "ISRC3INT1"),2139	MADERA_MUX_ROUTES("ISRC3INT2", "ISRC3INT2"),2140 2141	MADERA_MUX_ROUTES("ISRC3DEC1", "ISRC3DEC1"),2142	MADERA_MUX_ROUTES("ISRC3DEC2", "ISRC3DEC2"),2143 2144	MADERA_MUX_ROUTES("ISRC4INT1", "ISRC4INT1"),2145	MADERA_MUX_ROUTES("ISRC4INT2", "ISRC4INT2"),2146 2147	MADERA_MUX_ROUTES("ISRC4DEC1", "ISRC4DEC1"),2148	MADERA_MUX_ROUTES("ISRC4DEC2", "ISRC4DEC2"),2149 2150	{ "AEC1 Loopback", "HPOUT1L", "OUT1L" },2151	{ "AEC1 Loopback", "HPOUT1R", "OUT1R" },2152	{ "AEC2 Loopback", "HPOUT1L", "OUT1L" },2153	{ "AEC2 Loopback", "HPOUT1R", "OUT1R" },2154	{ "HPOUT1L", NULL, "OUT1L" },2155	{ "HPOUT1R", NULL, "OUT1R" },2156 2157	{ "AEC1 Loopback", "HPOUT2L", "OUT2L" },2158	{ "AEC1 Loopback", "HPOUT2R", "OUT2R" },2159	{ "AEC2 Loopback", "HPOUT2L", "OUT2L" },2160	{ "AEC2 Loopback", "HPOUT2R", "OUT2R" },2161	{ "HPOUT2L", NULL, "OUT2L" },2162	{ "HPOUT2R", NULL, "OUT2R" },2163 2164	{ "AEC1 Loopback", "HPOUT3L", "OUT3L" },2165	{ "AEC1 Loopback", "HPOUT3R", "OUT3R" },2166	{ "AEC2 Loopback", "HPOUT3L", "OUT3L" },2167	{ "AEC2 Loopback", "HPOUT3R", "OUT3R" },2168	{ "HPOUT3L", NULL, "OUT3L" },2169	{ "HPOUT3R", NULL, "OUT3R" },2170 2171	{ "AEC1 Loopback", "SPKOUTL", "OUT4L" },2172	{ "AEC2 Loopback", "SPKOUTL", "OUT4L" },2173	{ "SPKOUTLN", NULL, "OUT4L" },2174	{ "SPKOUTLP", NULL, "OUT4L" },2175 2176	{ "AEC1 Loopback", "SPKOUTR", "OUT4R" },2177	{ "AEC2 Loopback", "SPKOUTR", "OUT4R" },2178	{ "SPKOUTRN", NULL, "OUT4R" },2179	{ "SPKOUTRP", NULL, "OUT4R" },2180 2181	{ "AEC1 Loopback", "SPKDAT1L", "OUT5L" },2182	{ "AEC1 Loopback", "SPKDAT1R", "OUT5R" },2183	{ "AEC2 Loopback", "SPKDAT1L", "OUT5L" },2184	{ "AEC2 Loopback", "SPKDAT1R", "OUT5R" },2185	{ "SPKDAT1L", NULL, "OUT5L" },2186	{ "SPKDAT1R", NULL, "OUT5R" },2187 2188	{ "AEC1 Loopback", "SPKDAT2L", "OUT6L" },2189	{ "AEC1 Loopback", "SPKDAT2R", "OUT6R" },2190	{ "AEC2 Loopback", "SPKDAT2L", "OUT6L" },2191	{ "AEC2 Loopback", "SPKDAT2R", "OUT6R" },2192	{ "SPKDAT2L", NULL, "OUT6L" },2193	{ "SPKDAT2R", NULL, "OUT6R" },2194 2195	CS47L85_RXANC_INPUT_ROUTES("RXANCL", "RXANCL"),2196	CS47L85_RXANC_INPUT_ROUTES("RXANCR", "RXANCR"),2197 2198	CS47L85_RXANC_OUTPUT_ROUTES("OUT1L", "HPOUT1L"),2199	CS47L85_RXANC_OUTPUT_ROUTES("OUT1R", "HPOUT1R"),2200	CS47L85_RXANC_OUTPUT_ROUTES("OUT2L", "HPOUT2L"),2201	CS47L85_RXANC_OUTPUT_ROUTES("OUT2R", "HPOUT2R"),2202	CS47L85_RXANC_OUTPUT_ROUTES("OUT3L", "HPOUT3L"),2203	CS47L85_RXANC_OUTPUT_ROUTES("OUT3R", "HPOUT3R"),2204	CS47L85_RXANC_OUTPUT_ROUTES("OUT4L", "SPKOUTL"),2205	CS47L85_RXANC_OUTPUT_ROUTES("OUT4R", "SPKOUTR"),2206	CS47L85_RXANC_OUTPUT_ROUTES("OUT5L", "SPKDAT1L"),2207	CS47L85_RXANC_OUTPUT_ROUTES("OUT5R", "SPKDAT1R"),2208	CS47L85_RXANC_OUTPUT_ROUTES("OUT6L", "SPKDAT2L"),2209	CS47L85_RXANC_OUTPUT_ROUTES("OUT6R", "SPKDAT2R"),2210 2211	{ "SPDIF1", NULL, "SPD1" },2212 2213	{ "MICSUPP", NULL, "SYSCLK" },2214 2215	{ "DRC1 Signal Activity", NULL, "DRC1 Activity Output" },2216	{ "DRC2 Signal Activity", NULL, "DRC2 Activity Output" },2217	{ "DRC1 Activity Output", "Switch", "DRC1L" },2218	{ "DRC1 Activity Output", "Switch", "DRC1R" },2219	{ "DRC2 Activity Output", "Switch", "DRC2L" },2220	{ "DRC2 Activity Output", "Switch", "DRC2R" },2221};2222 2223static int cs47l85_set_fll(struct snd_soc_component *component, int fll_id,2224			   int source, unsigned int fref, unsigned int fout)2225{2226	struct cs47l85 *cs47l85 = snd_soc_component_get_drvdata(component);2227 2228	switch (fll_id) {2229	case MADERA_FLL1_REFCLK:2230		return madera_set_fll_refclk(&cs47l85->fll[0], source, fref,2231					     fout);2232	case MADERA_FLL2_REFCLK:2233		return madera_set_fll_refclk(&cs47l85->fll[1], source, fref,2234					     fout);2235	case MADERA_FLL3_REFCLK:2236		return madera_set_fll_refclk(&cs47l85->fll[2], source, fref,2237					     fout);2238	case MADERA_FLL1_SYNCCLK:2239		return madera_set_fll_syncclk(&cs47l85->fll[0], source, fref,2240					      fout);2241	case MADERA_FLL2_SYNCCLK:2242		return madera_set_fll_syncclk(&cs47l85->fll[1], source, fref,2243					      fout);2244	case MADERA_FLL3_SYNCCLK:2245		return madera_set_fll_syncclk(&cs47l85->fll[2], source, fref,2246					      fout);2247	default:2248		return -EINVAL;2249	}2250}2251 2252static const struct snd_soc_dai_ops cs47l85_dai_ops = {2253	.compress_new = snd_soc_new_compress,2254};2255 2256static struct snd_soc_dai_driver cs47l85_dai[] = {2257	{2258		.name = "cs47l85-aif1",2259		.id = 1,2260		.base = MADERA_AIF1_BCLK_CTRL,2261		.playback = {2262			.stream_name = "AIF1 Playback",2263			.channels_min = 1,2264			.channels_max = 8,2265			.rates = MADERA_RATES,2266			.formats = MADERA_FORMATS,2267		},2268		.capture = {2269			.stream_name = "AIF1 Capture",2270			.channels_min = 1,2271			.channels_max = 8,2272			.rates = MADERA_RATES,2273			.formats = MADERA_FORMATS,2274		 },2275		.ops = &madera_dai_ops,2276		.symmetric_rate = 1,2277		.symmetric_sample_bits = 1,2278	},2279	{2280		.name = "cs47l85-aif2",2281		.id = 2,2282		.base = MADERA_AIF2_BCLK_CTRL,2283		.playback = {2284			.stream_name = "AIF2 Playback",2285			.channels_min = 1,2286			.channels_max = 8,2287			.rates = MADERA_RATES,2288			.formats = MADERA_FORMATS,2289		},2290		.capture = {2291			.stream_name = "AIF2 Capture",2292			.channels_min = 1,2293			.channels_max = 8,2294			.rates = MADERA_RATES,2295			.formats = MADERA_FORMATS,2296		 },2297		.ops = &madera_dai_ops,2298		.symmetric_rate = 1,2299		.symmetric_sample_bits = 1,2300	},2301	{2302		.name = "cs47l85-aif3",2303		.id = 3,2304		.base = MADERA_AIF3_BCLK_CTRL,2305		.playback = {2306			.stream_name = "AIF3 Playback",2307			.channels_min = 1,2308			.channels_max = 2,2309			.rates = MADERA_RATES,2310			.formats = MADERA_FORMATS,2311		},2312		.capture = {2313			.stream_name = "AIF3 Capture",2314			.channels_min = 1,2315			.channels_max = 2,2316			.rates = MADERA_RATES,2317			.formats = MADERA_FORMATS,2318		 },2319		.ops = &madera_dai_ops,2320		.symmetric_rate = 1,2321		.symmetric_sample_bits = 1,2322	},2323	{2324		.name = "cs47l85-aif4",2325		.id = 4,2326		.base = MADERA_AIF4_BCLK_CTRL,2327		.playback = {2328			.stream_name = "AIF4 Playback",2329			.channels_min = 1,2330			.channels_max = 2,2331			.rates = MADERA_RATES,2332			.formats = MADERA_FORMATS,2333		},2334		.capture = {2335			.stream_name = "AIF4 Capture",2336			.channels_min = 1,2337			.channels_max = 2,2338			.rates = MADERA_RATES,2339			.formats = MADERA_FORMATS,2340		 },2341		.ops = &madera_dai_ops,2342		.symmetric_rate = 1,2343		.symmetric_sample_bits = 1,2344	},2345	{2346		.name = "cs47l85-slim1",2347		.id = 5,2348		.playback = {2349			.stream_name = "Slim1 Playback",2350			.channels_min = 1,2351			.channels_max = 4,2352			.rates = MADERA_RATES,2353			.formats = MADERA_FORMATS,2354		},2355		.capture = {2356			.stream_name = "Slim1 Capture",2357			.channels_min = 1,2358			.channels_max = 4,2359			.rates = MADERA_RATES,2360			.formats = MADERA_FORMATS,2361		 },2362		.ops = &madera_simple_dai_ops,2363	},2364	{2365		.name = "cs47l85-slim2",2366		.id = 6,2367		.playback = {2368			.stream_name = "Slim2 Playback",2369			.channels_min = 1,2370			.channels_max = 2,2371			.rates = MADERA_RATES,2372			.formats = MADERA_FORMATS,2373		},2374		.capture = {2375			.stream_name = "Slim2 Capture",2376			.channels_min = 1,2377			.channels_max = 2,2378			.rates = MADERA_RATES,2379			.formats = MADERA_FORMATS,2380		 },2381		.ops = &madera_simple_dai_ops,2382	},2383	{2384		.name = "cs47l85-slim3",2385		.id = 7,2386		.playback = {2387			.stream_name = "Slim3 Playback",2388			.channels_min = 1,2389			.channels_max = 2,2390			.rates = MADERA_RATES,2391			.formats = MADERA_FORMATS,2392		},2393		.capture = {2394			.stream_name = "Slim3 Capture",2395			.channels_min = 1,2396			.channels_max = 2,2397			.rates = MADERA_RATES,2398			.formats = MADERA_FORMATS,2399		 },2400		.ops = &madera_simple_dai_ops,2401	},2402	{2403		.name = "cs47l85-cpu-voicectrl",2404		.capture = {2405			.stream_name = "Voice Control CPU",2406			.channels_min = 1,2407			.channels_max = 1,2408			.rates = MADERA_RATES,2409			.formats = MADERA_FORMATS,2410		},2411		.ops = &cs47l85_dai_ops,2412	},2413	{2414		.name = "cs47l85-dsp-voicectrl",2415		.capture = {2416			.stream_name = "Voice Control DSP",2417			.channels_min = 1,2418			.channels_max = 1,2419			.rates = MADERA_RATES,2420			.formats = MADERA_FORMATS,2421		},2422	},2423	{2424		.name = "cs47l85-cpu-trace",2425		.capture = {2426			.stream_name = "Audio Trace CPU",2427			.channels_min = 1,2428			.channels_max = 6,2429			.rates = MADERA_RATES,2430			.formats = MADERA_FORMATS,2431		},2432		.ops = &cs47l85_dai_ops,2433	},2434	{2435		.name = "cs47l85-dsp-trace",2436		.capture = {2437			.stream_name = "Audio Trace DSP",2438			.channels_min = 1,2439			.channels_max = 6,2440			.rates = MADERA_RATES,2441			.formats = MADERA_FORMATS,2442		},2443	},2444};2445 2446static int cs47l85_open(struct snd_soc_component *component,2447			struct snd_compr_stream *stream)2448{2449	struct snd_soc_pcm_runtime *rtd = stream->private_data;2450	struct cs47l85 *cs47l85 = snd_soc_component_get_drvdata(component);2451	struct madera_priv *priv = &cs47l85->core;2452	struct madera *madera = priv->madera;2453	int n_adsp;2454 2455	if (strcmp(snd_soc_rtd_to_codec(rtd, 0)->name, "cs47l85-dsp-voicectrl") == 0) {2456		n_adsp = 5;2457	} else if (strcmp(snd_soc_rtd_to_codec(rtd, 0)->name, "cs47l85-dsp-trace") == 0) {2458		n_adsp = 0;2459	} else {2460		dev_err(madera->dev,2461			"No suitable compressed stream for DAI '%s'\n",2462			snd_soc_rtd_to_codec(rtd, 0)->name);2463		return -EINVAL;2464	}2465 2466	return wm_adsp_compr_open(&priv->adsp[n_adsp], stream);2467}2468 2469static irqreturn_t cs47l85_adsp2_irq(int irq, void *data)2470{2471	struct cs47l85 *cs47l85 = data;2472	struct madera_priv *priv = &cs47l85->core;2473	struct madera *madera = priv->madera;2474	struct madera_voice_trigger_info trig_info;2475	int serviced = 0;2476	int i, ret;2477 2478	for (i = 0; i < CS47L85_NUM_ADSP; ++i) {2479		ret = wm_adsp_compr_handle_irq(&priv->adsp[i]);2480		if (ret != -ENODEV)2481			serviced++;2482		if (ret == WM_ADSP_COMPR_VOICE_TRIGGER) {2483			trig_info.core_num = i + 1;2484			blocking_notifier_call_chain(&madera->notifier,2485						MADERA_NOTIFY_VOICE_TRIGGER,2486						&trig_info);2487		}2488	}2489 2490	if (!serviced) {2491		dev_err(madera->dev, "Spurious compressed data IRQ\n");2492		return IRQ_NONE;2493	}2494 2495	return IRQ_HANDLED;2496}2497 2498static int cs47l85_component_probe(struct snd_soc_component *component)2499{2500	struct cs47l85 *cs47l85 = snd_soc_component_get_drvdata(component);2501	struct madera *madera = cs47l85->core.madera;2502	int i, ret;2503 2504	snd_soc_component_init_regmap(component, madera->regmap);2505 2506	mutex_lock(&madera->dapm_ptr_lock);2507	madera->dapm = snd_soc_component_get_dapm(component);2508	mutex_unlock(&madera->dapm_ptr_lock);2509 2510	ret = madera_init_inputs(component);2511	if (ret)2512		return ret;2513 2514	ret = madera_init_outputs(component, NULL, CS47L85_MONO_OUTPUTS,2515				  CS47L85_MONO_OUTPUTS);2516	if (ret)2517		return ret;2518 2519	snd_soc_component_disable_pin(component, "HAPTICS");2520 2521	ret = snd_soc_add_component_controls(component,2522					     madera_adsp_rate_controls,2523					     CS47L85_NUM_ADSP);2524	if (ret)2525		return ret;2526 2527	for (i = 0; i < CS47L85_NUM_ADSP; i++)2528		wm_adsp2_component_probe(&cs47l85->core.adsp[i], component);2529 2530	return 0;2531}2532 2533static void cs47l85_component_remove(struct snd_soc_component *component)2534{2535	struct cs47l85 *cs47l85 = snd_soc_component_get_drvdata(component);2536	struct madera *madera = cs47l85->core.madera;2537	int i;2538 2539	mutex_lock(&madera->dapm_ptr_lock);2540	madera->dapm = NULL;2541	mutex_unlock(&madera->dapm_ptr_lock);2542 2543	for (i = 0; i < CS47L85_NUM_ADSP; i++)2544		wm_adsp2_component_remove(&cs47l85->core.adsp[i], component);2545}2546 2547#define MADERA_DIG_VU 0x02002548 2549static const unsigned int cs47l85_digital_vu[] = {2550	MADERA_DAC_DIGITAL_VOLUME_1L,2551	MADERA_DAC_DIGITAL_VOLUME_1R,2552	MADERA_DAC_DIGITAL_VOLUME_2L,2553	MADERA_DAC_DIGITAL_VOLUME_2R,2554	MADERA_DAC_DIGITAL_VOLUME_3L,2555	MADERA_DAC_DIGITAL_VOLUME_3R,2556	MADERA_DAC_DIGITAL_VOLUME_4L,2557	MADERA_DAC_DIGITAL_VOLUME_4R,2558	MADERA_DAC_DIGITAL_VOLUME_5L,2559	MADERA_DAC_DIGITAL_VOLUME_5R,2560	MADERA_DAC_DIGITAL_VOLUME_6L,2561	MADERA_DAC_DIGITAL_VOLUME_6R,2562};2563 2564static const struct snd_compress_ops cs47l85_compress_ops = {2565	.open = &cs47l85_open,2566	.free = &wm_adsp_compr_free,2567	.set_params = &wm_adsp_compr_set_params,2568	.get_caps = &wm_adsp_compr_get_caps,2569	.trigger = &wm_adsp_compr_trigger,2570	.pointer = &wm_adsp_compr_pointer,2571	.copy = &wm_adsp_compr_copy,2572};2573 2574static const struct snd_soc_component_driver soc_component_dev_cs47l85 = {2575	.probe			= &cs47l85_component_probe,2576	.remove			= &cs47l85_component_remove,2577	.set_sysclk		= &madera_set_sysclk,2578	.set_pll		= &cs47l85_set_fll,2579	.name			= DRV_NAME,2580	.compress_ops		= &cs47l85_compress_ops,2581	.controls		= cs47l85_snd_controls,2582	.num_controls		= ARRAY_SIZE(cs47l85_snd_controls),2583	.dapm_widgets		= cs47l85_dapm_widgets,2584	.num_dapm_widgets	= ARRAY_SIZE(cs47l85_dapm_widgets),2585	.dapm_routes		= cs47l85_dapm_routes,2586	.num_dapm_routes	= ARRAY_SIZE(cs47l85_dapm_routes),2587	.use_pmdown_time	= 1,2588	.endianness		= 1,2589};2590 2591static int cs47l85_probe(struct platform_device *pdev)2592{2593	struct madera *madera = dev_get_drvdata(pdev->dev.parent);2594	struct cs47l85 *cs47l85;2595	int i, ret;2596 2597	BUILD_BUG_ON(ARRAY_SIZE(cs47l85_dai) > MADERA_MAX_DAI);2598 2599	/* quick exit if Madera irqchip driver hasn't completed probe */2600	if (!madera->irq_dev) {2601		dev_dbg(&pdev->dev, "irqchip driver not ready\n");2602		return -EPROBE_DEFER;2603	}2604 2605	cs47l85 = devm_kzalloc(&pdev->dev, sizeof(struct cs47l85),2606			       GFP_KERNEL);2607	if (!cs47l85)2608		return -ENOMEM;2609 2610	platform_set_drvdata(pdev, cs47l85);2611 2612	cs47l85->core.madera = madera;2613	cs47l85->core.dev = &pdev->dev;2614	cs47l85->core.num_inputs = 12;2615 2616	ret = madera_core_init(&cs47l85->core);2617	if (ret)2618		return ret;2619 2620	ret = madera_init_overheat(&cs47l85->core);2621	if (ret)2622		goto error_core;2623 2624	ret = madera_request_irq(madera, MADERA_IRQ_DSP_IRQ1,2625				 "ADSP2 Compressed IRQ", cs47l85_adsp2_irq,2626				 cs47l85);2627	if (ret) {2628		dev_err(&pdev->dev, "Failed to request DSP IRQ: %d\n", ret);2629		goto error_overheat;2630	}2631 2632	ret = madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 1);2633	if (ret)2634		dev_warn(&pdev->dev, "Failed to set DSP IRQ wake: %d\n", ret);2635 2636	for (i = 0; i < CS47L85_NUM_ADSP; i++) {2637		cs47l85->core.adsp[i].part = "cs47l85";2638		cs47l85->core.adsp[i].cs_dsp.num = i + 1;2639		cs47l85->core.adsp[i].cs_dsp.type = WMFW_ADSP2;2640		cs47l85->core.adsp[i].cs_dsp.rev = 1;2641		cs47l85->core.adsp[i].cs_dsp.dev = madera->dev;2642		cs47l85->core.adsp[i].cs_dsp.regmap = madera->regmap_32bit;2643 2644		cs47l85->core.adsp[i].cs_dsp.base = wm_adsp2_control_bases[i];2645		cs47l85->core.adsp[i].cs_dsp.mem = cs47l85_dsp_regions[i];2646		cs47l85->core.adsp[i].cs_dsp.num_mems =2647			ARRAY_SIZE(cs47l85_dsp1_regions);2648 2649		ret = wm_adsp2_init(&cs47l85->core.adsp[i]);2650		if (ret) {2651			for (--i; i >= 0; --i)2652				wm_adsp2_remove(&cs47l85->core.adsp[i]);2653			goto error_dsp_irq;2654		}2655	}2656 2657	madera_init_fll(madera, 1, MADERA_FLL1_CONTROL_1 - 1,2658			&cs47l85->fll[0]);2659	madera_init_fll(madera, 2, MADERA_FLL2_CONTROL_1 - 1,2660			&cs47l85->fll[1]);2661	madera_init_fll(madera, 3, MADERA_FLL3_CONTROL_1 - 1,2662			&cs47l85->fll[2]);2663 2664	for (i = 0; i < ARRAY_SIZE(cs47l85_dai); i++)2665		madera_init_dai(&cs47l85->core, i);2666 2667	/* Latch volume update bits */2668	for (i = 0; i < ARRAY_SIZE(cs47l85_digital_vu); i++)2669		regmap_update_bits(madera->regmap, cs47l85_digital_vu[i],2670				   MADERA_DIG_VU, MADERA_DIG_VU);2671 2672	pm_runtime_enable(&pdev->dev);2673	pm_runtime_idle(&pdev->dev);2674 2675	ret = devm_snd_soc_register_component(&pdev->dev,2676					      &soc_component_dev_cs47l85,2677					      cs47l85_dai,2678					      ARRAY_SIZE(cs47l85_dai));2679	if (ret < 0) {2680		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);2681		goto error_pm_runtime;2682	}2683 2684	return ret;2685 2686error_pm_runtime:2687	pm_runtime_disable(&pdev->dev);2688 2689	for (i = 0; i < CS47L85_NUM_ADSP; i++)2690		wm_adsp2_remove(&cs47l85->core.adsp[i]);2691error_dsp_irq:2692	madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 0);2693	madera_free_irq(madera, MADERA_IRQ_DSP_IRQ1, cs47l85);2694error_overheat:2695	madera_free_overheat(&cs47l85->core);2696error_core:2697	madera_core_free(&cs47l85->core);2698 2699	return ret;2700}2701 2702static void cs47l85_remove(struct platform_device *pdev)2703{2704	struct cs47l85 *cs47l85 = platform_get_drvdata(pdev);2705	int i;2706 2707	pm_runtime_disable(&pdev->dev);2708 2709	for (i = 0; i < CS47L85_NUM_ADSP; i++)2710		wm_adsp2_remove(&cs47l85->core.adsp[i]);2711 2712	madera_set_irq_wake(cs47l85->core.madera, MADERA_IRQ_DSP_IRQ1, 0);2713	madera_free_irq(cs47l85->core.madera, MADERA_IRQ_DSP_IRQ1, cs47l85);2714	madera_free_overheat(&cs47l85->core);2715	madera_core_free(&cs47l85->core);2716}2717 2718static struct platform_driver cs47l85_codec_driver = {2719	.driver = {2720		.name = "cs47l85-codec",2721	},2722	.probe = &cs47l85_probe,2723	.remove = cs47l85_remove,2724};2725 2726module_platform_driver(cs47l85_codec_driver);2727 2728MODULE_SOFTDEP("pre: madera irq-madera arizona-micsupp");2729MODULE_DESCRIPTION("ASoC CS47L85 driver");2730MODULE_AUTHOR("Nariman Poushin <nariman@opensource.cirrus.com>");2731MODULE_LICENSE("GPL v2");2732MODULE_ALIAS("platform:cs47l85-codec");2733