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