2019-06-25 18:37:27 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2019-06-19 16:41:58 +03:00
//
// ALSA SoC Audio driver for CS47L85 codec
//
// Copyright (C) 2015-2019 Cirrus Logic, Inc. and
// Cirrus Logic International Semiconductor Ltd.
//
# include <linux/module.h>
# include <linux/moduleparam.h>
# include <linux/device.h>
# include <linux/delay.h>
# include <linux/init.h>
# include <linux/pm.h>
# include <linux/pm_runtime.h>
# include <linux/regmap.h>
# include <sound/core.h>
# include <sound/pcm.h>
# include <sound/pcm_params.h>
# include <sound/soc.h>
# include <sound/tlv.h>
# include <linux/irqchip/irq-madera.h>
# include <linux/mfd/madera/core.h>
# include <linux/mfd/madera/registers.h>
# include "madera.h"
# include "wm_adsp.h"
# define DRV_NAME "cs47l85-codec"
# define CS47L85_NUM_ADSP 7
# define CS47L85_MONO_OUTPUTS 4
struct cs47l85 {
struct madera_priv core ;
struct madera_fll fll [ 3 ] ;
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp1_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x080000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x0e0000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x0a0000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x0c0000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp2_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x100000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x160000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x120000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x140000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp3_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x180000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x1e0000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x1a0000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x1c0000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp4_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x200000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x260000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x220000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x240000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp5_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x280000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x2e0000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x2a0000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x2c0000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp6_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x300000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x360000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x320000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x340000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region cs47l85_dsp7_regions [ ] = {
2019-06-19 16:41:58 +03:00
{ . type = WMFW_ADSP2_PM , . base = 0x380000 } ,
{ . type = WMFW_ADSP2_ZM , . base = 0x3e0000 } ,
{ . type = WMFW_ADSP2_XM , . base = 0x3a0000 } ,
{ . type = WMFW_ADSP2_YM , . base = 0x3c0000 } ,
} ;
2021-09-13 19:00:46 +03:00
static const struct cs_dsp_region * cs47l85_dsp_regions [ ] = {
2019-06-19 16:41:58 +03:00
cs47l85_dsp1_regions ,
cs47l85_dsp2_regions ,
cs47l85_dsp3_regions ,
cs47l85_dsp4_regions ,
cs47l85_dsp5_regions ,
cs47l85_dsp6_regions ,
cs47l85_dsp7_regions ,
} ;
static const unsigned int wm_adsp2_control_bases [ ] = {
MADERA_DSP1_CONFIG_1 ,
MADERA_DSP2_CONFIG_1 ,
MADERA_DSP3_CONFIG_1 ,
MADERA_DSP4_CONFIG_1 ,
MADERA_DSP5_CONFIG_1 ,
MADERA_DSP6_CONFIG_1 ,
MADERA_DSP7_CONFIG_1 ,
} ;
static int cs47l85_adsp_power_ev ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol ,
int event )
{
struct snd_soc_component * component =
snd_soc_dapm_to_component ( w - > dapm ) ;
struct cs47l85 * cs47l85 = snd_soc_component_get_drvdata ( component ) ;
struct madera_priv * priv = & cs47l85 - > core ;
struct madera * madera = priv - > madera ;
unsigned int freq ;
int ret ;
ret = regmap_read ( madera - > regmap , MADERA_DSP_CLOCK_1 , & freq ) ;
if ( ret ! = 0 ) {
dev_err ( madera - > dev ,
" Failed to read MADERA_DSP_CLOCK_1: %d \n " , ret ) ;
return ret ;
}
freq & = MADERA_DSP_CLK_FREQ_LEGACY_MASK ;
freq > > = MADERA_DSP_CLK_FREQ_LEGACY_SHIFT ;
switch ( event ) {
case SND_SOC_DAPM_PRE_PMU :
ret = madera_set_adsp_clk ( & cs47l85 - > core , w - > shift , freq ) ;
if ( ret )
return ret ;
break ;
default :
break ;
}
return wm_adsp_early_event ( w , kcontrol , event ) ;
}
# define CS47L85_NG_SRC(name, base) \
SOC_SINGLE ( name " NG HPOUT1L Switch " , base , 0 , 1 , 0 ) , \
SOC_SINGLE ( name " NG HPOUT1R Switch " , base , 1 , 1 , 0 ) , \
SOC_SINGLE ( name " NG HPOUT2L Switch " , base , 2 , 1 , 0 ) , \
SOC_SINGLE ( name " NG HPOUT2R Switch " , base , 3 , 1 , 0 ) , \
SOC_SINGLE ( name " NG HPOUT3L Switch " , base , 4 , 1 , 0 ) , \
SOC_SINGLE ( name " NG HPOUT3R Switch " , base , 5 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKOUTL Switch " , base , 6 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKOUTR Switch " , base , 7 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKDAT1L Switch " , base , 8 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKDAT1R Switch " , base , 9 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKDAT2L Switch " , base , 10 , 1 , 0 ) , \
SOC_SINGLE ( name " NG SPKDAT2R Switch " , base , 11 , 1 , 0 )
# define CS47L85_RXANC_INPUT_ROUTES(widget, name) \
{ widget , NULL , name " NG Mux " } , \
{ name " NG Internal " , NULL , " RXANC NG Clock " } , \
{ name " NG Internal " , NULL , name " Channel " } , \
{ name " NG External " , NULL , " RXANC NG External Clock " } , \
{ name " NG External " , NULL , name " Channel " } , \
{ name " NG Mux " , " None " , name " Channel " } , \
{ name " NG Mux " , " Internal " , name " NG Internal " } , \
{ name " NG Mux " , " External " , name " NG External " } , \
{ name " Channel " , " Left " , name " Left Input " } , \
{ name " Channel " , " Combine " , name " Left Input " } , \
{ name " Channel " , " Right " , name " Right Input " } , \
{ name " Channel " , " Combine " , name " Right Input " } , \
{ name " Left Input " , " IN1 " , " IN1L " } , \
{ name " Right Input " , " IN1 " , " IN1R " } , \
{ name " Left Input " , " IN2 " , " IN2L " } , \
{ name " Right Input " , " IN2 " , " IN2R " } , \
{ name " Left Input " , " IN3 " , " IN3L " } , \
{ name " Right Input " , " IN3 " , " IN3R " } , \
{ name " Left Input " , " IN4 " , " IN4L " } , \
{ name " Right Input " , " IN4 " , " IN4R " } , \
{ name " Left Input " , " IN5 " , " IN5L " } , \
{ name " Right Input " , " IN5 " , " IN5R " } , \
{ name " Left Input " , " IN6 " , " IN6L " } , \
{ name " Right Input " , " IN6 " , " IN6R " }
# define CS47L85_RXANC_OUTPUT_ROUTES(widget, name) \
{ widget , NULL , name " ANC Source " } , \
{ name " ANC Source " , " RXANCL " , " RXANCL " } , \
{ name " ANC Source " , " RXANCR " , " RXANCR " }
static void cs47l85_hp_post_enable ( struct snd_soc_dapm_widget * w )
{
struct snd_soc_component * component =
snd_soc_dapm_to_component ( w - > dapm ) ;
unsigned int val ;
switch ( w - > shift ) {
case MADERA_OUT1L_ENA_SHIFT :
case MADERA_OUT1R_ENA_SHIFT :
ASoC: soc-component: merge snd_soc_component_read() and snd_soc_component_read32()
We had read/write function for Codec, Platform, etc,
but these has been merged into snd_soc_component_read/write().
Internally, it is using regmap or driver function.
In read case, each styles are like below
regmap
ret = regmap_read(..., reg, &val);
driver function
val = xxx->read(..., reg);
Because of this kind of different style, to keep same read style,
when we merged each read function into snd_soc_component_read(),
we created snd_soc_component_read32(), like below.
commit 738b49efe6c6 ("ASoC: add snd_soc_component_read32")
(1) val = snd_soc_component_read32(component, reg);
(2) ret = snd_soc_component_read(component, reg, &val);
Many drivers are using snd_soc_component_read32(), and
some drivers are using snd_soc_component_read() today.
In generally, we don't check read function successes,
because, we will have many other issues at initial timing
if read function didn't work.
Now we can use soc_component_err() when error case.
This means, it is easy to notice if error occurred.
This patch aggressively merge snd_soc_component_read() and _read32(),
and makes snd_soc_component_read/write() as generally style.
This patch do
1) merge snd_soc_component_read() and snd_soc_component_read32()
2) it uses soc_component_err() when error case (easy to notice)
3) keeps read32 for now by #define
4) update snd_soc_component_read() for all drivers
Because _read() user drivers are not too many, this patch changes
all user drivers.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/87sgev4mfl.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2020-06-16 08:19:41 +03:00
val = snd_soc_component_read ( component , MADERA_OUTPUT_ENABLES_1 ) ;
2019-06-19 16:41:58 +03:00
val & = ( MADERA_OUT1L_ENA | MADERA_OUT1R_ENA ) ;
if ( val ! = ( MADERA_OUT1L_ENA | MADERA_OUT1R_ENA ) )
break ;
snd_soc_component_update_bits ( component ,
MADERA_EDRE_HP_STEREO_CONTROL ,
0x0001 , 1 ) ;
break ;
default :
break ;
}
}
static void cs47l85_hp_post_disable ( struct snd_soc_dapm_widget * w )
{
struct snd_soc_component * component =
snd_soc_dapm_to_component ( w - > dapm ) ;
switch ( w - > shift ) {
case MADERA_OUT1L_ENA_SHIFT :
snd_soc_component_write ( component , MADERA_DCS_HP1L_CONTROL ,
0x2006 ) ;
break ;
case MADERA_OUT1R_ENA_SHIFT :
snd_soc_component_write ( component , MADERA_DCS_HP1R_CONTROL ,
0x2006 ) ;
break ;
default :
return ;
}
/* Only get to here for OUT1L and OUT1R */
snd_soc_component_update_bits ( component ,
MADERA_EDRE_HP_STEREO_CONTROL ,
0x0001 , 0 ) ;
}
static int cs47l85_hp_ev ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
int ret ;
switch ( event ) {
case SND_SOC_DAPM_PRE_PMU :
case SND_SOC_DAPM_PRE_PMD :
return madera_hp_ev ( w , kcontrol , event ) ;
case SND_SOC_DAPM_POST_PMU :
ret = madera_hp_ev ( w , kcontrol , event ) ;
if ( ret < 0 )
return ret ;
cs47l85_hp_post_enable ( w ) ;
return 0 ;
case SND_SOC_DAPM_POST_PMD :
ret = madera_hp_ev ( w , kcontrol , event ) ;
cs47l85_hp_post_disable ( w ) ;
return ret ;
default :
return - EINVAL ;
}
}
static const struct snd_kcontrol_new cs47l85_snd_controls [ ] = {
SOC_ENUM ( " IN1 OSR " , madera_in_dmic_osr [ 0 ] ) ,
SOC_ENUM ( " IN2 OSR " , madera_in_dmic_osr [ 1 ] ) ,
SOC_ENUM ( " IN3 OSR " , madera_in_dmic_osr [ 2 ] ) ,
SOC_ENUM ( " IN4 OSR " , madera_in_dmic_osr [ 3 ] ) ,
SOC_ENUM ( " IN5 OSR " , madera_in_dmic_osr [ 4 ] ) ,
SOC_ENUM ( " IN6 OSR " , madera_in_dmic_osr [ 5 ] ) ,
SOC_SINGLE_RANGE_TLV ( " IN1L Volume " , MADERA_IN1L_CONTROL ,
MADERA_IN1L_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_SINGLE_RANGE_TLV ( " IN1R Volume " , MADERA_IN1R_CONTROL ,
MADERA_IN1R_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_SINGLE_RANGE_TLV ( " IN2L Volume " , MADERA_IN2L_CONTROL ,
MADERA_IN2L_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_SINGLE_RANGE_TLV ( " IN2R Volume " , MADERA_IN2R_CONTROL ,
MADERA_IN2R_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_SINGLE_RANGE_TLV ( " IN3L Volume " , MADERA_IN3L_CONTROL ,
MADERA_IN3L_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_SINGLE_RANGE_TLV ( " IN3R Volume " , MADERA_IN3R_CONTROL ,
MADERA_IN3R_PGA_VOL_SHIFT , 0x40 , 0x5f , 0 , madera_ana_tlv ) ,
SOC_ENUM ( " IN HPF Cutoff Frequency " , madera_in_hpf_cut_enum ) ,
SOC_SINGLE ( " IN1L HPF Switch " , MADERA_IN1L_CONTROL ,
MADERA_IN1L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN1R HPF Switch " , MADERA_IN1R_CONTROL ,
MADERA_IN1R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN2L HPF Switch " , MADERA_IN2L_CONTROL ,
MADERA_IN2L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN2R HPF Switch " , MADERA_IN2R_CONTROL ,
MADERA_IN2R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN3L HPF Switch " , MADERA_IN3L_CONTROL ,
MADERA_IN3L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN3R HPF Switch " , MADERA_IN3R_CONTROL ,
MADERA_IN3R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN4L HPF Switch " , MADERA_IN4L_CONTROL ,
MADERA_IN4L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN4R HPF Switch " , MADERA_IN4R_CONTROL ,
MADERA_IN4R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN5L HPF Switch " , MADERA_IN5L_CONTROL ,
MADERA_IN5L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN5R HPF Switch " , MADERA_IN5R_CONTROL ,
MADERA_IN5R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN6L HPF Switch " , MADERA_IN6L_CONTROL ,
MADERA_IN6L_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " IN6R HPF Switch " , MADERA_IN6R_CONTROL ,
MADERA_IN6R_HPF_SHIFT , 1 , 0 ) ,
SOC_SINGLE_TLV ( " IN1L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_1L ,
MADERA_IN1L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN1R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_1R ,
MADERA_IN1R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN2L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_2L ,
MADERA_IN2L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN2R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_2R ,
MADERA_IN2R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN3L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_3L ,
MADERA_IN3L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN3R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_3R ,
MADERA_IN3R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN4L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_4L ,
MADERA_IN4L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN4R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_4R ,
MADERA_IN4R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN5L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_5L ,
MADERA_IN5L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN5R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_5R ,
MADERA_IN5R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN6L Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_6L ,
MADERA_IN6L_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_SINGLE_TLV ( " IN6R Digital Volume " , MADERA_ADC_DIGITAL_VOLUME_6R ,
MADERA_IN6R_DIG_VOL_SHIFT , 0xbf , 0 , madera_digital_tlv ) ,
SOC_ENUM ( " Input Ramp Up " , madera_in_vi_ramp ) ,
SOC_ENUM ( " Input Ramp Down " , madera_in_vd_ramp ) ,
SND_SOC_BYTES ( " RXANC Coefficients " , MADERA_ANC_COEFF_START ,
MADERA_ANC_COEFF_END - MADERA_ANC_COEFF_START + 1 ) ,
SND_SOC_BYTES ( " RXANCL Config " , MADERA_FCL_FILTER_CONTROL , 1 ) ,
SND_SOC_BYTES ( " RXANCL Coefficients " , MADERA_FCL_COEFF_START ,
MADERA_FCL_COEFF_END - MADERA_FCL_COEFF_START + 1 ) ,
SND_SOC_BYTES ( " RXANCR Config " , MADERA_FCR_FILTER_CONTROL , 1 ) ,
SND_SOC_BYTES ( " RXANCR Coefficients " , MADERA_FCR_COEFF_START ,
MADERA_FCR_COEFF_END - MADERA_FCR_COEFF_START + 1 ) ,
MADERA_MIXER_CONTROLS ( " EQ1 " , MADERA_EQ1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " EQ2 " , MADERA_EQ2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " EQ3 " , MADERA_EQ3MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " EQ4 " , MADERA_EQ4MIX_INPUT_1_SOURCE ) ,
MADERA_EQ_CONTROL ( " EQ1 Coefficients " , MADERA_EQ1_2 ) ,
SOC_SINGLE_TLV ( " EQ1 B1 Volume " , MADERA_EQ1_1 , MADERA_EQ1_B1_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ1 B2 Volume " , MADERA_EQ1_1 , MADERA_EQ1_B2_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ1 B3 Volume " , MADERA_EQ1_1 , MADERA_EQ1_B3_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ1 B4 Volume " , MADERA_EQ1_2 , MADERA_EQ1_B4_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ1 B5 Volume " , MADERA_EQ1_2 , MADERA_EQ1_B5_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
MADERA_EQ_CONTROL ( " EQ2 Coefficients " , MADERA_EQ2_2 ) ,
SOC_SINGLE_TLV ( " EQ2 B1 Volume " , MADERA_EQ2_1 , MADERA_EQ2_B1_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ2 B2 Volume " , MADERA_EQ2_1 , MADERA_EQ2_B2_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ2 B3 Volume " , MADERA_EQ2_1 , MADERA_EQ2_B3_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ2 B4 Volume " , MADERA_EQ2_2 , MADERA_EQ2_B4_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ2 B5 Volume " , MADERA_EQ2_2 , MADERA_EQ2_B5_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
MADERA_EQ_CONTROL ( " EQ3 Coefficients " , MADERA_EQ3_2 ) ,
SOC_SINGLE_TLV ( " EQ3 B1 Volume " , MADERA_EQ3_1 , MADERA_EQ3_B1_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ3 B2 Volume " , MADERA_EQ3_1 , MADERA_EQ3_B2_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ3 B3 Volume " , MADERA_EQ3_1 , MADERA_EQ3_B3_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ3 B4 Volume " , MADERA_EQ3_2 , MADERA_EQ3_B4_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ3 B5 Volume " , MADERA_EQ3_2 , MADERA_EQ3_B5_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
MADERA_EQ_CONTROL ( " EQ4 Coefficients " , MADERA_EQ4_2 ) ,
SOC_SINGLE_TLV ( " EQ4 B1 Volume " , MADERA_EQ4_1 , MADERA_EQ4_B1_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ4 B2 Volume " , MADERA_EQ4_1 , MADERA_EQ4_B2_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ4 B3 Volume " , MADERA_EQ4_1 , MADERA_EQ4_B3_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ4 B4 Volume " , MADERA_EQ4_2 , MADERA_EQ4_B4_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
SOC_SINGLE_TLV ( " EQ4 B5 Volume " , MADERA_EQ4_2 , MADERA_EQ4_B5_GAIN_SHIFT ,
24 , 0 , madera_eq_tlv ) ,
MADERA_MIXER_CONTROLS ( " DRC1L " , MADERA_DRC1LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DRC1R " , MADERA_DRC1RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DRC2L " , MADERA_DRC2LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DRC2R " , MADERA_DRC2RMIX_INPUT_1_SOURCE ) ,
SND_SOC_BYTES_MASK ( " DRC1 " , MADERA_DRC1_CTRL1 , 5 ,
MADERA_DRC1R_ENA | MADERA_DRC1L_ENA ) ,
SND_SOC_BYTES_MASK ( " DRC2 " , MADERA_DRC2_CTRL1 , 5 ,
MADERA_DRC2R_ENA | MADERA_DRC2L_ENA ) ,
MADERA_MIXER_CONTROLS ( " LHPF1 " , MADERA_HPLP1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " LHPF2 " , MADERA_HPLP2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " LHPF3 " , MADERA_HPLP3MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " LHPF4 " , MADERA_HPLP4MIX_INPUT_1_SOURCE ) ,
MADERA_LHPF_CONTROL ( " LHPF1 Coefficients " , MADERA_HPLPF1_2 ) ,
MADERA_LHPF_CONTROL ( " LHPF2 Coefficients " , MADERA_HPLPF2_2 ) ,
MADERA_LHPF_CONTROL ( " LHPF3 Coefficients " , MADERA_HPLPF3_2 ) ,
MADERA_LHPF_CONTROL ( " LHPF4 Coefficients " , MADERA_HPLPF4_2 ) ,
SOC_ENUM ( " LHPF1 Mode " , madera_lhpf1_mode ) ,
SOC_ENUM ( " LHPF2 Mode " , madera_lhpf2_mode ) ,
SOC_ENUM ( " LHPF3 Mode " , madera_lhpf3_mode ) ,
SOC_ENUM ( " LHPF4 Mode " , madera_lhpf4_mode ) ,
MADERA_RATE_ENUM ( " ISRC1 FSL " , madera_isrc_fsl [ 0 ] ) ,
MADERA_RATE_ENUM ( " ISRC2 FSL " , madera_isrc_fsl [ 1 ] ) ,
MADERA_RATE_ENUM ( " ISRC3 FSL " , madera_isrc_fsl [ 2 ] ) ,
MADERA_RATE_ENUM ( " ISRC4 FSL " , madera_isrc_fsl [ 3 ] ) ,
MADERA_RATE_ENUM ( " ISRC1 FSH " , madera_isrc_fsh [ 0 ] ) ,
MADERA_RATE_ENUM ( " ISRC2 FSH " , madera_isrc_fsh [ 1 ] ) ,
MADERA_RATE_ENUM ( " ISRC3 FSH " , madera_isrc_fsh [ 2 ] ) ,
MADERA_RATE_ENUM ( " ISRC4 FSH " , madera_isrc_fsh [ 3 ] ) ,
MADERA_RATE_ENUM ( " ASRC1 Rate 1 " , madera_asrc1_rate [ 0 ] ) ,
MADERA_RATE_ENUM ( " ASRC1 Rate 2 " , madera_asrc1_rate [ 1 ] ) ,
MADERA_RATE_ENUM ( " ASRC2 Rate 1 " , madera_asrc2_rate [ 0 ] ) ,
MADERA_RATE_ENUM ( " ASRC2 Rate 2 " , madera_asrc2_rate [ 1 ] ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP1 " , 1 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP2 " , 2 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP3 " , 3 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP4 " , 4 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP5 " , 5 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP6 " , 6 ) ,
WM_ADSP2_PRELOAD_SWITCH ( " DSP7 " , 7 ) ,
MADERA_MIXER_CONTROLS ( " DSP1L " , MADERA_DSP1LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP1R " , MADERA_DSP1RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP2L " , MADERA_DSP2LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP2R " , MADERA_DSP2RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP3L " , MADERA_DSP3LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP3R " , MADERA_DSP3RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP4L " , MADERA_DSP4LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP4R " , MADERA_DSP4RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP5L " , MADERA_DSP5LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP5R " , MADERA_DSP5RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP6L " , MADERA_DSP6LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP6R " , MADERA_DSP6RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP7L " , MADERA_DSP7LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " DSP7R " , MADERA_DSP7RMIX_INPUT_1_SOURCE ) ,
SOC_SINGLE_TLV ( " Noise Generator Volume " , MADERA_COMFORT_NOISE_GENERATOR ,
MADERA_NOISE_GEN_GAIN_SHIFT , 0x16 , 0 , madera_noise_tlv ) ,
MADERA_MIXER_CONTROLS ( " HPOUT1L " , MADERA_OUT1LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " HPOUT1R " , MADERA_OUT1RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " HPOUT2L " , MADERA_OUT2LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " HPOUT2R " , MADERA_OUT2RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " HPOUT3L " , MADERA_OUT3LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " HPOUT3R " , MADERA_OUT3RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKOUTL " , MADERA_OUT4LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKOUTR " , MADERA_OUT4RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKDAT1L " , MADERA_OUT5LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKDAT1R " , MADERA_OUT5RMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKDAT2L " , MADERA_OUT6LMIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SPKDAT2R " , MADERA_OUT6RMIX_INPUT_1_SOURCE ) ,
SOC_SINGLE ( " HPOUT1 SC Protect Switch " , MADERA_HP1_SHORT_CIRCUIT_CTRL ,
MADERA_HP1_SC_ENA_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " HPOUT2 SC Protect Switch " , MADERA_HP2_SHORT_CIRCUIT_CTRL ,
MADERA_HP2_SC_ENA_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " HPOUT3 SC Protect Switch " , MADERA_HP3_SHORT_CIRCUIT_CTRL ,
MADERA_HP3_SC_ENA_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " SPKDAT1 High Performance Switch " , MADERA_OUTPUT_PATH_CONFIG_5L ,
MADERA_OUT5_OSR_SHIFT , 1 , 0 ) ,
SOC_SINGLE ( " SPKDAT2 High Performance Switch " , MADERA_OUTPUT_PATH_CONFIG_6L ,
MADERA_OUT6_OSR_SHIFT , 1 , 0 ) ,
SOC_DOUBLE_R ( " HPOUT1 Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_1L ,
MADERA_DAC_DIGITAL_VOLUME_1R , MADERA_OUT1L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R ( " HPOUT2 Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_2L ,
MADERA_DAC_DIGITAL_VOLUME_2R , MADERA_OUT2L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R ( " HPOUT3 Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_3L ,
MADERA_DAC_DIGITAL_VOLUME_3R , MADERA_OUT3L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R ( " Speaker Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_4L ,
MADERA_DAC_DIGITAL_VOLUME_4R , MADERA_OUT4L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R ( " SPKDAT1 Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_5L ,
MADERA_DAC_DIGITAL_VOLUME_5R , MADERA_OUT5L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R ( " SPKDAT2 Digital Switch " , MADERA_DAC_DIGITAL_VOLUME_6L ,
MADERA_DAC_DIGITAL_VOLUME_6R , MADERA_OUT6L_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE_R_TLV ( " HPOUT1 Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_1L ,
MADERA_DAC_DIGITAL_VOLUME_1R , MADERA_OUT1L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE_R_TLV ( " HPOUT2 Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_2L ,
MADERA_DAC_DIGITAL_VOLUME_2R , MADERA_OUT2L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE_R_TLV ( " HPOUT3 Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_3L ,
MADERA_DAC_DIGITAL_VOLUME_3R , MADERA_OUT3L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE_R_TLV ( " Speaker Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_4L ,
MADERA_DAC_DIGITAL_VOLUME_4R , MADERA_OUT4L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE_R_TLV ( " SPKDAT1 Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_5L ,
MADERA_DAC_DIGITAL_VOLUME_5R , MADERA_OUT5L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE_R_TLV ( " SPKDAT2 Digital Volume " , MADERA_DAC_DIGITAL_VOLUME_6L ,
MADERA_DAC_DIGITAL_VOLUME_6R , MADERA_OUT6L_VOL_SHIFT ,
0xbf , 0 , madera_digital_tlv ) ,
SOC_DOUBLE ( " SPKDAT1 Switch " , MADERA_PDM_SPK1_CTRL_1 , MADERA_SPK1L_MUTE_SHIFT ,
MADERA_SPK1R_MUTE_SHIFT , 1 , 1 ) ,
SOC_DOUBLE ( " SPKDAT2 Switch " , MADERA_PDM_SPK2_CTRL_1 , MADERA_SPK2L_MUTE_SHIFT ,
MADERA_SPK2R_MUTE_SHIFT , 1 , 1 ) ,
SOC_ENUM ( " Output Ramp Up " , madera_out_vi_ramp ) ,
SOC_ENUM ( " Output Ramp Down " , madera_out_vd_ramp ) ,
SOC_SINGLE ( " Noise Gate Switch " , MADERA_NOISE_GATE_CONTROL ,
MADERA_NGATE_ENA_SHIFT , 1 , 0 ) ,
SOC_SINGLE_TLV ( " Noise Gate Threshold Volume " , MADERA_NOISE_GATE_CONTROL ,
MADERA_NGATE_THR_SHIFT , 7 , 1 , madera_ng_tlv ) ,
SOC_ENUM ( " Noise Gate Hold " , madera_ng_hold ) ,
CS47L85_NG_SRC ( " HPOUT1L " , MADERA_NOISE_GATE_SELECT_1L ) ,
CS47L85_NG_SRC ( " HPOUT1R " , MADERA_NOISE_GATE_SELECT_1R ) ,
CS47L85_NG_SRC ( " HPOUT2L " , MADERA_NOISE_GATE_SELECT_2L ) ,
CS47L85_NG_SRC ( " HPOUT2R " , MADERA_NOISE_GATE_SELECT_2R ) ,
CS47L85_NG_SRC ( " HPOUT3L " , MADERA_NOISE_GATE_SELECT_3L ) ,
CS47L85_NG_SRC ( " HPOUT3R " , MADERA_NOISE_GATE_SELECT_3R ) ,
CS47L85_NG_SRC ( " SPKOUTL " , MADERA_NOISE_GATE_SELECT_4L ) ,
CS47L85_NG_SRC ( " SPKOUTR " , MADERA_NOISE_GATE_SELECT_4R ) ,
CS47L85_NG_SRC ( " SPKDAT1L " , MADERA_NOISE_GATE_SELECT_5L ) ,
CS47L85_NG_SRC ( " SPKDAT1R " , MADERA_NOISE_GATE_SELECT_5R ) ,
CS47L85_NG_SRC ( " SPKDAT2L " , MADERA_NOISE_GATE_SELECT_6L ) ,
CS47L85_NG_SRC ( " SPKDAT2R " , MADERA_NOISE_GATE_SELECT_6R ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX1 " , MADERA_AIF1TX1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX2 " , MADERA_AIF1TX2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX3 " , MADERA_AIF1TX3MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX4 " , MADERA_AIF1TX4MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX5 " , MADERA_AIF1TX5MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX6 " , MADERA_AIF1TX6MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX7 " , MADERA_AIF1TX7MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF1TX8 " , MADERA_AIF1TX8MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX1 " , MADERA_AIF2TX1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX2 " , MADERA_AIF2TX2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX3 " , MADERA_AIF2TX3MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX4 " , MADERA_AIF2TX4MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX5 " , MADERA_AIF2TX5MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX6 " , MADERA_AIF2TX6MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX7 " , MADERA_AIF2TX7MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF2TX8 " , MADERA_AIF2TX8MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF3TX1 " , MADERA_AIF3TX1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF3TX2 " , MADERA_AIF3TX2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF4TX1 " , MADERA_AIF4TX1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " AIF4TX2 " , MADERA_AIF4TX2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX1 " , MADERA_SLIMTX1MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX2 " , MADERA_SLIMTX2MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX3 " , MADERA_SLIMTX3MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX4 " , MADERA_SLIMTX4MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX5 " , MADERA_SLIMTX5MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX6 " , MADERA_SLIMTX6MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX7 " , MADERA_SLIMTX7MIX_INPUT_1_SOURCE ) ,
MADERA_MIXER_CONTROLS ( " SLIMTX8 " , MADERA_SLIMTX8MIX_INPUT_1_SOURCE ) ,
MADERA_GAINMUX_CONTROLS ( " SPDIF1TX1 " , MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE ) ,
MADERA_GAINMUX_CONTROLS ( " SPDIF1TX2 " , MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE ) ,
WM_ADSP_FW_CONTROL ( " DSP1 " , 0 ) ,
WM_ADSP_FW_CONTROL ( " DSP2 " , 1 ) ,
WM_ADSP_FW_CONTROL ( " DSP3 " , 2 ) ,
WM_ADSP_FW_CONTROL ( " DSP4 " , 3 ) ,
WM_ADSP_FW_CONTROL ( " DSP5 " , 4 ) ,
WM_ADSP_FW_CONTROL ( " DSP6 " , 5 ) ,
WM_ADSP_FW_CONTROL ( " DSP7 " , 6 ) ,
} ;
MADERA_MIXER_ENUMS ( EQ1 , MADERA_EQ1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( EQ2 , MADERA_EQ2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( EQ3 , MADERA_EQ3MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( EQ4 , MADERA_EQ4MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DRC1L , MADERA_DRC1LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DRC1R , MADERA_DRC1RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DRC2L , MADERA_DRC2LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DRC2R , MADERA_DRC2RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( LHPF1 , MADERA_HPLP1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( LHPF2 , MADERA_HPLP2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( LHPF3 , MADERA_HPLP3MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( LHPF4 , MADERA_HPLP4MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP1L , MADERA_DSP1LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP1R , MADERA_DSP1RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP1 , MADERA_DSP1AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP2L , MADERA_DSP2LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP2R , MADERA_DSP2RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP2 , MADERA_DSP2AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP3L , MADERA_DSP3LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP3R , MADERA_DSP3RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP3 , MADERA_DSP3AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP4L , MADERA_DSP4LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP4R , MADERA_DSP4RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP4 , MADERA_DSP4AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP5L , MADERA_DSP5LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP5R , MADERA_DSP5RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP5 , MADERA_DSP5AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP6L , MADERA_DSP6LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP6R , MADERA_DSP6RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP6 , MADERA_DSP6AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP7L , MADERA_DSP7LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( DSP7R , MADERA_DSP7RMIX_INPUT_1_SOURCE ) ;
MADERA_DSP_AUX_ENUMS ( DSP7 , MADERA_DSP7AUX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( PWM1 , MADERA_PWM1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( PWM2 , MADERA_PWM2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT1L , MADERA_OUT1LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT1R , MADERA_OUT1RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT2L , MADERA_OUT2LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT2R , MADERA_OUT2RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT3L , MADERA_OUT3LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( OUT3R , MADERA_OUT3RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKOUTL , MADERA_OUT4LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKOUTR , MADERA_OUT4RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKDAT1L , MADERA_OUT5LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKDAT1R , MADERA_OUT5RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKDAT2L , MADERA_OUT6LMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SPKDAT2R , MADERA_OUT6RMIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX1 , MADERA_AIF1TX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX2 , MADERA_AIF1TX2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX3 , MADERA_AIF1TX3MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX4 , MADERA_AIF1TX4MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX5 , MADERA_AIF1TX5MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX6 , MADERA_AIF1TX6MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX7 , MADERA_AIF1TX7MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF1TX8 , MADERA_AIF1TX8MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX1 , MADERA_AIF2TX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX2 , MADERA_AIF2TX2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX3 , MADERA_AIF2TX3MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX4 , MADERA_AIF2TX4MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX5 , MADERA_AIF2TX5MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX6 , MADERA_AIF2TX6MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX7 , MADERA_AIF2TX7MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF2TX8 , MADERA_AIF2TX8MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF3TX1 , MADERA_AIF3TX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF3TX2 , MADERA_AIF3TX2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF4TX1 , MADERA_AIF4TX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( AIF4TX2 , MADERA_AIF4TX2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX1 , MADERA_SLIMTX1MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX2 , MADERA_SLIMTX2MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX3 , MADERA_SLIMTX3MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX4 , MADERA_SLIMTX4MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX5 , MADERA_SLIMTX5MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX6 , MADERA_SLIMTX6MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX7 , MADERA_SLIMTX7MIX_INPUT_1_SOURCE ) ;
MADERA_MIXER_ENUMS ( SLIMTX8 , MADERA_SLIMTX8MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( SPD1TX1 , MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( SPD1TX2 , MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC1IN1L , MADERA_ASRC1_1LMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC1IN1R , MADERA_ASRC1_1RMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC1IN2L , MADERA_ASRC1_2LMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC1IN2R , MADERA_ASRC1_2RMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC2IN1L , MADERA_ASRC2_1LMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC2IN1R , MADERA_ASRC2_1RMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC2IN2L , MADERA_ASRC2_2LMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ASRC2IN2R , MADERA_ASRC2_2RMIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1INT1 , MADERA_ISRC1INT1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1INT2 , MADERA_ISRC1INT2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1INT3 , MADERA_ISRC1INT3MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1INT4 , MADERA_ISRC1INT4MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1DEC1 , MADERA_ISRC1DEC1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1DEC2 , MADERA_ISRC1DEC2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1DEC3 , MADERA_ISRC1DEC3MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC1DEC4 , MADERA_ISRC1DEC4MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2INT1 , MADERA_ISRC2INT1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2INT2 , MADERA_ISRC2INT2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2INT3 , MADERA_ISRC2INT3MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2INT4 , MADERA_ISRC2INT4MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2DEC1 , MADERA_ISRC2DEC1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2DEC2 , MADERA_ISRC2DEC2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2DEC3 , MADERA_ISRC2DEC3MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC2DEC4 , MADERA_ISRC2DEC4MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC3INT1 , MADERA_ISRC3INT1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC3INT2 , MADERA_ISRC3INT2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC3DEC1 , MADERA_ISRC3DEC1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC3DEC2 , MADERA_ISRC3DEC2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC4INT1 , MADERA_ISRC4INT1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC4INT2 , MADERA_ISRC4INT2MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC4DEC1 , MADERA_ISRC4DEC1MIX_INPUT_1_SOURCE ) ;
MADERA_MUX_ENUMS ( ISRC4DEC2 , MADERA_ISRC4DEC2MIX_INPUT_1_SOURCE ) ;
static const char * const cs47l85_aec_loopback_texts [ ] = {
" HPOUT1L " , " HPOUT1R " , " HPOUT2L " , " HPOUT2R " , " HPOUT3L " , " HPOUT3R " ,
" SPKOUTL " , " SPKOUTR " , " SPKDAT1L " , " SPKDAT1R " , " SPKDAT2L " , " SPKDAT2R " ,
} ;
static const unsigned int cs47l85_aec_loopback_values [ ] = {
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ,
} ;
static const struct soc_enum cs47l85_aec1_loopback =
SOC_VALUE_ENUM_SINGLE ( MADERA_DAC_AEC_CONTROL_1 ,
MADERA_AEC1_LOOPBACK_SRC_SHIFT , 0xf ,
ARRAY_SIZE ( cs47l85_aec_loopback_texts ) ,
cs47l85_aec_loopback_texts ,
cs47l85_aec_loopback_values ) ;
static const struct soc_enum cs47l85_aec2_loopback =
SOC_VALUE_ENUM_SINGLE ( MADERA_DAC_AEC_CONTROL_2 ,
MADERA_AEC2_LOOPBACK_SRC_SHIFT , 0xf ,
ARRAY_SIZE ( cs47l85_aec_loopback_texts ) ,
cs47l85_aec_loopback_texts ,
cs47l85_aec_loopback_values ) ;
static const struct snd_kcontrol_new cs47l85_aec_loopback_mux [ ] = {
SOC_DAPM_ENUM ( " AEC1 Loopback " , cs47l85_aec1_loopback ) ,
SOC_DAPM_ENUM ( " AEC2 Loopback " , cs47l85_aec2_loopback ) ,
} ;
static const struct snd_kcontrol_new cs47l85_anc_input_mux [ ] = {
SOC_DAPM_ENUM ( " RXANCL Input " , madera_anc_input_src [ 0 ] ) ,
SOC_DAPM_ENUM ( " RXANCL Channel " , madera_anc_input_src [ 1 ] ) ,
SOC_DAPM_ENUM ( " RXANCR Input " , madera_anc_input_src [ 2 ] ) ,
SOC_DAPM_ENUM ( " RXANCR Channel " , madera_anc_input_src [ 3 ] ) ,
} ;
static const struct snd_kcontrol_new cs47l85_anc_ng_mux =
SOC_DAPM_ENUM ( " RXANC NG Source " , madera_anc_ng_enum ) ;
static const struct snd_kcontrol_new cs47l85_output_anc_src [ ] = {
SOC_DAPM_ENUM ( " HPOUT1L ANC Source " , madera_output_anc_src [ 0 ] ) ,
SOC_DAPM_ENUM ( " HPOUT1R ANC Source " , madera_output_anc_src [ 1 ] ) ,
SOC_DAPM_ENUM ( " HPOUT2L ANC Source " , madera_output_anc_src [ 2 ] ) ,
SOC_DAPM_ENUM ( " HPOUT2R ANC Source " , madera_output_anc_src [ 3 ] ) ,
SOC_DAPM_ENUM ( " HPOUT3L ANC Source " , madera_output_anc_src [ 4 ] ) ,
SOC_DAPM_ENUM ( " HPOUT3R ANC Source " , madera_output_anc_src [ 5 ] ) ,
SOC_DAPM_ENUM ( " SPKOUTL ANC Source " , madera_output_anc_src [ 6 ] ) ,
SOC_DAPM_ENUM ( " SPKOUTR ANC Source " , madera_output_anc_src [ 7 ] ) ,
SOC_DAPM_ENUM ( " SPKDAT1L ANC Source " , madera_output_anc_src [ 8 ] ) ,
SOC_DAPM_ENUM ( " SPKDAT1R ANC Source " , madera_output_anc_src [ 9 ] ) ,
SOC_DAPM_ENUM ( " SPKDAT2L ANC Source " , madera_output_anc_src [ 10 ] ) ,
SOC_DAPM_ENUM ( " SPKDAT2R ANC Source " , madera_output_anc_src [ 11 ] ) ,
} ;
static const struct snd_soc_dapm_widget cs47l85_dapm_widgets [ ] = {
SND_SOC_DAPM_SUPPLY ( " SYSCLK " , MADERA_SYSTEM_CLOCK_1 , MADERA_SYSCLK_ENA_SHIFT ,
0 , madera_sysclk_ev ,
2019-12-30 17:35:16 +03:00
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD ) ,
2019-06-19 16:41:58 +03:00
SND_SOC_DAPM_SUPPLY ( " ASYNCCLK " , MADERA_ASYNC_CLOCK_1 ,
2019-12-30 17:35:16 +03:00
MADERA_ASYNC_CLK_ENA_SHIFT , 0 , madera_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
2019-06-19 16:41:58 +03:00
SND_SOC_DAPM_SUPPLY ( " OPCLK " , MADERA_OUTPUT_SYSTEM_CLOCK ,
MADERA_OPCLK_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " ASYNCOPCLK " , MADERA_OUTPUT_ASYNC_CLOCK ,
MADERA_OPCLK_ASYNC_ENA_SHIFT , 0 , NULL , 0 ) ,
2019-12-30 17:35:16 +03:00
SND_SOC_DAPM_SUPPLY ( " DSPCLK " , MADERA_DSP_CLOCK_1 , MADERA_DSP_CLK_ENA_SHIFT ,
0 , madera_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
2019-06-19 16:41:58 +03:00
SND_SOC_DAPM_REGULATOR_SUPPLY ( " DBVDD2 " , 0 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " DBVDD3 " , 0 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " DBVDD4 " , 0 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " CPVDD1 " , 20 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " CPVDD2 " , 20 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " MICVDD " , 0 , SND_SOC_DAPM_REGULATOR_BYPASS ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " SPKVDDL " , 0 , 0 ) ,
SND_SOC_DAPM_REGULATOR_SUPPLY ( " SPKVDDR " , 0 , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " MICBIAS1 " , MADERA_MIC_BIAS_CTRL_1 ,
MADERA_MICB1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " MICBIAS2 " , MADERA_MIC_BIAS_CTRL_2 ,
MADERA_MICB1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " MICBIAS3 " , MADERA_MIC_BIAS_CTRL_3 ,
MADERA_MICB1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " MICBIAS4 " , MADERA_MIC_BIAS_CTRL_4 ,
MADERA_MICB1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SUPPLY ( " FXCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_FX , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ASRC1CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ASRC1 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ASRC2CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ASRC2 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ISRC1CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ISRC1 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ISRC2CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ISRC2 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ISRC3CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ISRC3 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " ISRC4CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_ISRC4 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " OUTCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_OUT , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " SPDCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_SPD , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP1CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP1 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP2CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP2 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP3CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP3 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP4CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP4 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP5CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP5 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP6CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP6 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " DSP7CLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_DSP7 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " AIF1TXCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_AIF1 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " AIF2TXCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_AIF2 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " AIF3TXCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_AIF3 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " AIF4TXCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_AIF4 , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " SLIMBUSCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_SLIMBUS , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " PWMCLK " , SND_SOC_NOPM ,
MADERA_DOM_GRP_PWM , 0 ,
madera_domain_clk_ev ,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " RXANC NG External Clock " , SND_SOC_NOPM ,
MADERA_EXT_NG_SEL_SET_SHIFT , 0 , madera_anc_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_SUPPLY ( " RXANC NG Clock " , SND_SOC_NOPM ,
MADERA_CLK_NG_ENA_SET_SHIFT , 0 , madera_anc_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_SIGGEN ( " TONE " ) ,
SND_SOC_DAPM_SIGGEN ( " NOISE " ) ,
SND_SOC_DAPM_INPUT ( " IN1ALN " ) ,
SND_SOC_DAPM_INPUT ( " IN1ALP " ) ,
SND_SOC_DAPM_INPUT ( " IN1BN " ) ,
SND_SOC_DAPM_INPUT ( " IN1BP " ) ,
SND_SOC_DAPM_INPUT ( " IN1RN " ) ,
SND_SOC_DAPM_INPUT ( " IN1RP " ) ,
SND_SOC_DAPM_INPUT ( " IN2ALN " ) ,
SND_SOC_DAPM_INPUT ( " IN2ALP " ) ,
SND_SOC_DAPM_INPUT ( " IN2ARN " ) ,
SND_SOC_DAPM_INPUT ( " IN2ARP " ) ,
SND_SOC_DAPM_INPUT ( " IN2BLN " ) ,
SND_SOC_DAPM_INPUT ( " IN2BLP " ) ,
SND_SOC_DAPM_INPUT ( " IN2BRN " ) ,
SND_SOC_DAPM_INPUT ( " IN2BRP " ) ,
SND_SOC_DAPM_INPUT ( " IN3LN " ) ,
SND_SOC_DAPM_INPUT ( " IN3LP " ) ,
SND_SOC_DAPM_INPUT ( " IN3RN " ) ,
SND_SOC_DAPM_INPUT ( " IN3RP " ) ,
SND_SOC_DAPM_INPUT ( " DMICCLK4 " ) ,
SND_SOC_DAPM_INPUT ( " DMICDAT4 " ) ,
SND_SOC_DAPM_INPUT ( " DMICCLK5 " ) ,
SND_SOC_DAPM_INPUT ( " DMICDAT5 " ) ,
SND_SOC_DAPM_INPUT ( " DMICCLK6 " ) ,
SND_SOC_DAPM_INPUT ( " DMICDAT6 " ) ,
SND_SOC_DAPM_MUX ( " IN1L Analog Mux " , SND_SOC_NOPM , 0 , 0 , & madera_inmux [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " IN2L Analog Mux " , SND_SOC_NOPM , 0 , 0 , & madera_inmux [ 2 ] ) ,
SND_SOC_DAPM_MUX ( " IN2R Analog Mux " , SND_SOC_NOPM , 0 , 0 , & madera_inmux [ 3 ] ) ,
SND_SOC_DAPM_MUX ( " IN1L Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " IN1R Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " IN2L Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 1 ] ) ,
SND_SOC_DAPM_MUX ( " IN2R Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 1 ] ) ,
SND_SOC_DAPM_MUX ( " IN3L Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 2 ] ) ,
SND_SOC_DAPM_MUX ( " IN3R Mode " , SND_SOC_NOPM , 0 , 0 , & madera_inmode [ 2 ] ) ,
SND_SOC_DAPM_OUTPUT ( " DRC1 Signal Activity " ) ,
SND_SOC_DAPM_OUTPUT ( " DRC2 Signal Activity " ) ,
SND_SOC_DAPM_OUTPUT ( " DSP Trigger Out " ) ,
SND_SOC_DAPM_PGA ( " PWM1 Driver " , MADERA_PWM_DRIVE_1 , MADERA_PWM1_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " PWM2 Driver " , MADERA_PWM_DRIVE_1 , MADERA_PWM2_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " RXANCL NG External " , SND_SOC_NOPM , 0 , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " RXANCR NG External " , SND_SOC_NOPM , 0 , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " RXANCL NG Internal " , SND_SOC_NOPM , 0 , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " RXANCR NG Internal " , SND_SOC_NOPM , 0 , 0 , NULL , 0 ) ,
SND_SOC_DAPM_MUX ( " RXANCL Left Input " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCL Right Input " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCL Channel " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 1 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCL NG Mux " , SND_SOC_NOPM , 0 , 0 , & cs47l85_anc_ng_mux ) ,
SND_SOC_DAPM_MUX ( " RXANCR Left Input " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 2 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCR Right Input " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 2 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCR Channel " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_anc_input_mux [ 3 ] ) ,
SND_SOC_DAPM_MUX ( " RXANCR NG Mux " , SND_SOC_NOPM , 0 , 0 , & cs47l85_anc_ng_mux ) ,
SND_SOC_DAPM_PGA_E ( " RXANCL " , SND_SOC_NOPM , MADERA_CLK_L_ENA_SET_SHIFT ,
0 , NULL , 0 , madera_anc_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_PGA_E ( " RXANCR " , SND_SOC_NOPM , MADERA_CLK_R_ENA_SET_SHIFT ,
0 , NULL , 0 , madera_anc_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_MUX ( " HPOUT1L ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " HPOUT1R ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 1 ] ) ,
SND_SOC_DAPM_MUX ( " HPOUT2L ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 2 ] ) ,
SND_SOC_DAPM_MUX ( " HPOUT2R ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 3 ] ) ,
SND_SOC_DAPM_MUX ( " HPOUT3L ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 4 ] ) ,
SND_SOC_DAPM_MUX ( " HPOUT3R ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 5 ] ) ,
SND_SOC_DAPM_MUX ( " SPKOUTL ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 6 ] ) ,
SND_SOC_DAPM_MUX ( " SPKOUTR ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 7 ] ) ,
SND_SOC_DAPM_MUX ( " SPKDAT1L ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 8 ] ) ,
SND_SOC_DAPM_MUX ( " SPKDAT1R ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 9 ] ) ,
SND_SOC_DAPM_MUX ( " SPKDAT2L ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 10 ] ) ,
SND_SOC_DAPM_MUX ( " SPKDAT2R ANC Source " , SND_SOC_NOPM , 0 , 0 ,
& cs47l85_output_anc_src [ 11 ] ) ,
SND_SOC_DAPM_AIF_OUT ( " AIF1TX1 " , NULL , 0 ,
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF1TX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_TX_ENABLES , MADERA_AIF1TX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " AIF2TX1 " , NULL , 0 ,
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF2TX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_TX_ENABLES , MADERA_AIF2TX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " SLIMTX1 " , NULL , 0 ,
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " SLIMTX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_TX_CHANNEL_ENABLE ,
MADERA_SLIMTX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " AIF3TX1 " , NULL , 0 ,
MADERA_AIF3_TX_ENABLES , MADERA_AIF3TX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF3TX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF3_TX_ENABLES , MADERA_AIF3TX2_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " AIF4TX1 " , NULL , 0 ,
MADERA_AIF4_TX_ENABLES , MADERA_AIF4TX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_OUT ( " AIF4TX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF4_TX_ENABLES , MADERA_AIF4TX2_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_PGA_E ( " OUT1L " , SND_SOC_NOPM ,
MADERA_OUT1L_ENA_SHIFT , 0 , NULL , 0 , cs47l85_hp_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT1R " , SND_SOC_NOPM ,
MADERA_OUT1R_ENA_SHIFT , 0 , NULL , 0 , cs47l85_hp_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT2L " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT2L_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT2R " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT2R_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT3L " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT3L_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT3R " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT3R_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT4L " , SND_SOC_NOPM ,
MADERA_OUT4L_ENA_SHIFT , 0 , NULL , 0 , madera_spk_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_PGA_E ( " OUT4R " , SND_SOC_NOPM ,
MADERA_OUT4R_ENA_SHIFT , 0 , NULL , 0 , madera_spk_ev ,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD ) ,
SND_SOC_DAPM_PGA_E ( " OUT5L " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT5L_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT5R " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT5R_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT6L " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT6L_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " OUT6R " , MADERA_OUTPUT_ENABLES_1 ,
MADERA_OUT6R_ENA_SHIFT , 0 , NULL , 0 , madera_out_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA ( " SPD1TX1 " , MADERA_SPD1_TX_CONTROL ,
MADERA_SPD1_VAL1_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " SPD1TX2 " , MADERA_SPD1_TX_CONTROL ,
MADERA_SPD1_VAL2_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_OUT_DRV ( " SPD1 " , MADERA_SPD1_TX_CONTROL ,
MADERA_SPD1_ENA_SHIFT , 0 , NULL , 0 ) ,
/*
* Input mux widgets arranged in order of sources in MADERA_MIXER_INPUT_ROUTES
* to take advantage of cache lookup in DAPM
*/
SND_SOC_DAPM_PGA ( " Noise Generator " , MADERA_COMFORT_NOISE_GENERATOR ,
MADERA_NOISE_GEN_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " Tone Generator 1 " , MADERA_TONE_GENERATOR_1 ,
MADERA_TONE1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " Tone Generator 2 " , MADERA_TONE_GENERATOR_1 ,
MADERA_TONE2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_SIGGEN ( " HAPTICS " ) ,
SND_SOC_DAPM_MUX ( " AEC1 Loopback " , MADERA_DAC_AEC_CONTROL_1 ,
MADERA_AEC1_LOOPBACK_ENA_SHIFT , 0 ,
& cs47l85_aec_loopback_mux [ 0 ] ) ,
SND_SOC_DAPM_MUX ( " AEC2 Loopback " , MADERA_DAC_AEC_CONTROL_2 ,
MADERA_AEC2_LOOPBACK_ENA_SHIFT , 0 ,
& cs47l85_aec_loopback_mux [ 1 ] ) ,
SND_SOC_DAPM_PGA_E ( " IN1L " , MADERA_INPUT_ENABLES , MADERA_IN1L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN1R " , MADERA_INPUT_ENABLES , MADERA_IN1R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN2L " , MADERA_INPUT_ENABLES , MADERA_IN2L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN2R " , MADERA_INPUT_ENABLES , MADERA_IN2R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN3L " , MADERA_INPUT_ENABLES , MADERA_IN3L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN3R " , MADERA_INPUT_ENABLES , MADERA_IN3R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN4L " , MADERA_INPUT_ENABLES , MADERA_IN4L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN4R " , MADERA_INPUT_ENABLES , MADERA_IN4R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN5L " , MADERA_INPUT_ENABLES , MADERA_IN5L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN5R " , MADERA_INPUT_ENABLES , MADERA_IN5R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN6L " , MADERA_INPUT_ENABLES , MADERA_IN6L_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_PGA_E ( " IN6R " , MADERA_INPUT_ENABLES , MADERA_IN6R_ENA_SHIFT ,
0 , NULL , 0 , madera_in_ev ,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU ) ,
SND_SOC_DAPM_AIF_IN ( " AIF1RX1 " , NULL , 0 ,
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF1RX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF1_RX_ENABLES , MADERA_AIF1RX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " AIF2RX1 " , NULL , 0 ,
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF2RX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF2_RX_ENABLES , MADERA_AIF2RX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " AIF3RX1 " , NULL , 0 ,
MADERA_AIF3_RX_ENABLES , MADERA_AIF3RX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF3RX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF3_RX_ENABLES , MADERA_AIF3RX2_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " AIF4RX1 " , NULL , 0 ,
MADERA_AIF4_RX_ENABLES , MADERA_AIF4RX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " AIF4RX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_AIF4_RX_ENABLES , MADERA_AIF4RX2_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " SLIMRX1 " , NULL , 0 ,
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX1_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX2 " , NULL , 1 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX2_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX3 " , NULL , 2 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX3_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX4 " , NULL , 3 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX4_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX5 " , NULL , 4 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX5_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX6 " , NULL , 5 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX6_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX7 " , NULL , 6 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX7_ENA_SHIFT , 0 ) ,
2020-07-28 17:41:41 +03:00
SND_SOC_DAPM_AIF_IN ( " SLIMRX8 " , NULL , 7 ,
2019-06-19 16:41:58 +03:00
MADERA_SLIMBUS_RX_CHANNEL_ENABLE ,
MADERA_SLIMRX8_ENA_SHIFT , 0 ) ,
SND_SOC_DAPM_PGA ( " EQ1 " , MADERA_EQ1_1 , MADERA_EQ1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " EQ2 " , MADERA_EQ2_1 , MADERA_EQ2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " EQ3 " , MADERA_EQ3_1 , MADERA_EQ3_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " EQ4 " , MADERA_EQ4_1 , MADERA_EQ4_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " DRC1L " , MADERA_DRC1_CTRL1 , MADERA_DRC1L_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " DRC1R " , MADERA_DRC1_CTRL1 , MADERA_DRC1R_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " DRC2L " , MADERA_DRC2_CTRL1 , MADERA_DRC2L_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " DRC2R " , MADERA_DRC2_CTRL1 , MADERA_DRC2R_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " LHPF1 " , MADERA_HPLPF1_1 , MADERA_LHPF1_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " LHPF2 " , MADERA_HPLPF2_1 , MADERA_LHPF2_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " LHPF3 " , MADERA_HPLPF3_1 , MADERA_LHPF3_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " LHPF4 " , MADERA_HPLPF4_1 , MADERA_LHPF4_ENA_SHIFT , 0 ,
NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC1IN1L " , MADERA_ASRC1_ENABLE , MADERA_ASRC1_IN1L_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC1IN1R " , MADERA_ASRC1_ENABLE , MADERA_ASRC1_IN1R_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC1IN2L " , MADERA_ASRC1_ENABLE , MADERA_ASRC1_IN2L_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC1IN2R " , MADERA_ASRC1_ENABLE , MADERA_ASRC1_IN2R_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC2IN1L " , MADERA_ASRC2_ENABLE , MADERA_ASRC2_IN1L_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC2IN1R " , MADERA_ASRC2_ENABLE , MADERA_ASRC2_IN1R_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC2IN2L " , MADERA_ASRC2_ENABLE , MADERA_ASRC2_IN2L_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ASRC2IN2R " , MADERA_ASRC2_ENABLE , MADERA_ASRC2_IN2R_ENA_SHIFT ,
0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1DEC1 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_DEC1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1DEC2 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_DEC2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1DEC3 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_DEC3_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1DEC4 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_DEC4_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1INT1 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_INT1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1INT2 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_INT2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1INT3 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_INT3_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC1INT4 " , MADERA_ISRC_1_CTRL_3 ,
MADERA_ISRC1_INT4_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2DEC1 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_DEC1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2DEC2 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_DEC2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2DEC3 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_DEC3_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2DEC4 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_DEC4_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2INT1 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_INT1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2INT2 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_INT2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2INT3 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_INT3_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC2INT4 " , MADERA_ISRC_2_CTRL_3 ,
MADERA_ISRC2_INT4_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC3DEC1 " , MADERA_ISRC_3_CTRL_3 ,
MADERA_ISRC3_DEC1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC3DEC2 " , MADERA_ISRC_3_CTRL_3 ,
MADERA_ISRC3_DEC2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC3INT1 " , MADERA_ISRC_3_CTRL_3 ,
MADERA_ISRC3_INT1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC3INT2 " , MADERA_ISRC_3_CTRL_3 ,
MADERA_ISRC3_INT2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC4DEC1 " , MADERA_ISRC_4_CTRL_3 ,
MADERA_ISRC4_DEC1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC4DEC2 " , MADERA_ISRC_4_CTRL_3 ,
MADERA_ISRC4_DEC2_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC4INT1 " , MADERA_ISRC_4_CTRL_3 ,
MADERA_ISRC4_INT1_ENA_SHIFT , 0 , NULL , 0 ) ,
SND_SOC_DAPM_PGA ( " ISRC4INT2 " , MADERA_ISRC_4_CTRL_3 ,
MADERA_ISRC4_INT2_ENA_SHIFT , 0 , NULL , 0 ) ,
WM_ADSP2 ( " DSP1 " , 0 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP2 " , 1 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP3 " , 2 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP4 " , 3 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP5 " , 4 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP6 " , 5 , cs47l85_adsp_power_ev ) ,
WM_ADSP2 ( " DSP7 " , 6 , cs47l85_adsp_power_ev ) ,
/* End of ordered input mux widgets */
MADERA_MIXER_WIDGETS ( EQ1 , " EQ1 " ) ,
MADERA_MIXER_WIDGETS ( EQ2 , " EQ2 " ) ,
MADERA_MIXER_WIDGETS ( EQ3 , " EQ3 " ) ,
MADERA_MIXER_WIDGETS ( EQ4 , " EQ4 " ) ,
MADERA_MIXER_WIDGETS ( DRC1L , " DRC1L " ) ,
MADERA_MIXER_WIDGETS ( DRC1R , " DRC1R " ) ,
MADERA_MIXER_WIDGETS ( DRC2L , " DRC2L " ) ,
MADERA_MIXER_WIDGETS ( DRC2R , " DRC2R " ) ,
SND_SOC_DAPM_SWITCH ( " DRC1 Activity Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_drc_activity_output_mux [ 0 ] ) ,
SND_SOC_DAPM_SWITCH ( " DRC2 Activity Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_drc_activity_output_mux [ 1 ] ) ,
MADERA_MIXER_WIDGETS ( LHPF1 , " LHPF1 " ) ,
MADERA_MIXER_WIDGETS ( LHPF2 , " LHPF2 " ) ,
MADERA_MIXER_WIDGETS ( LHPF3 , " LHPF3 " ) ,
MADERA_MIXER_WIDGETS ( LHPF4 , " LHPF4 " ) ,
MADERA_MIXER_WIDGETS ( PWM1 , " PWM1 " ) ,
MADERA_MIXER_WIDGETS ( PWM2 , " PWM2 " ) ,
MADERA_MIXER_WIDGETS ( OUT1L , " HPOUT1L " ) ,
MADERA_MIXER_WIDGETS ( OUT1R , " HPOUT1R " ) ,
MADERA_MIXER_WIDGETS ( OUT2L , " HPOUT2L " ) ,
MADERA_MIXER_WIDGETS ( OUT2R , " HPOUT2R " ) ,
MADERA_MIXER_WIDGETS ( OUT3L , " HPOUT3L " ) ,
MADERA_MIXER_WIDGETS ( OUT3R , " HPOUT3R " ) ,
MADERA_MIXER_WIDGETS ( SPKOUTL , " SPKOUTL " ) ,
MADERA_MIXER_WIDGETS ( SPKOUTR , " SPKOUTR " ) ,
MADERA_MIXER_WIDGETS ( SPKDAT1L , " SPKDAT1L " ) ,
MADERA_MIXER_WIDGETS ( SPKDAT1R , " SPKDAT1R " ) ,
MADERA_MIXER_WIDGETS ( SPKDAT2L , " SPKDAT2L " ) ,
MADERA_MIXER_WIDGETS ( SPKDAT2R , " SPKDAT2R " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX1 , " AIF1TX1 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX2 , " AIF1TX2 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX3 , " AIF1TX3 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX4 , " AIF1TX4 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX5 , " AIF1TX5 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX6 , " AIF1TX6 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX7 , " AIF1TX7 " ) ,
MADERA_MIXER_WIDGETS ( AIF1TX8 , " AIF1TX8 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX1 , " AIF2TX1 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX2 , " AIF2TX2 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX3 , " AIF2TX3 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX4 , " AIF2TX4 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX5 , " AIF2TX5 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX6 , " AIF2TX6 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX7 , " AIF2TX7 " ) ,
MADERA_MIXER_WIDGETS ( AIF2TX8 , " AIF2TX8 " ) ,
MADERA_MIXER_WIDGETS ( AIF3TX1 , " AIF3TX1 " ) ,
MADERA_MIXER_WIDGETS ( AIF3TX2 , " AIF3TX2 " ) ,
MADERA_MIXER_WIDGETS ( AIF4TX1 , " AIF4TX1 " ) ,
MADERA_MIXER_WIDGETS ( AIF4TX2 , " AIF4TX2 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX1 , " SLIMTX1 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX2 , " SLIMTX2 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX3 , " SLIMTX3 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX4 , " SLIMTX4 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX5 , " SLIMTX5 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX6 , " SLIMTX6 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX7 , " SLIMTX7 " ) ,
MADERA_MIXER_WIDGETS ( SLIMTX8 , " SLIMTX8 " ) ,
MADERA_MUX_WIDGETS ( SPD1TX1 , " SPDIF1TX1 " ) ,
MADERA_MUX_WIDGETS ( SPD1TX2 , " SPDIF1TX2 " ) ,
MADERA_MUX_WIDGETS ( ASRC1IN1L , " ASRC1IN1L " ) ,
MADERA_MUX_WIDGETS ( ASRC1IN1R , " ASRC1IN1R " ) ,
MADERA_MUX_WIDGETS ( ASRC1IN2L , " ASRC1IN2L " ) ,
MADERA_MUX_WIDGETS ( ASRC1IN2R , " ASRC1IN2R " ) ,
MADERA_MUX_WIDGETS ( ASRC2IN1L , " ASRC2IN1L " ) ,
MADERA_MUX_WIDGETS ( ASRC2IN1R , " ASRC2IN1R " ) ,
MADERA_MUX_WIDGETS ( ASRC2IN2L , " ASRC2IN2L " ) ,
MADERA_MUX_WIDGETS ( ASRC2IN2R , " ASRC2IN2R " ) ,
MADERA_DSP_WIDGETS ( DSP1 , " DSP1 " ) ,
MADERA_DSP_WIDGETS ( DSP2 , " DSP2 " ) ,
MADERA_DSP_WIDGETS ( DSP3 , " DSP3 " ) ,
MADERA_DSP_WIDGETS ( DSP4 , " DSP4 " ) ,
MADERA_DSP_WIDGETS ( DSP5 , " DSP5 " ) ,
MADERA_DSP_WIDGETS ( DSP6 , " DSP6 " ) ,
MADERA_DSP_WIDGETS ( DSP7 , " DSP7 " ) ,
SND_SOC_DAPM_SWITCH ( " DSP1 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 0 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP2 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 1 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP3 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 2 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP4 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 3 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP5 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 4 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP6 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 5 ] ) ,
SND_SOC_DAPM_SWITCH ( " DSP7 Trigger Output " , SND_SOC_NOPM , 0 , 0 ,
& madera_dsp_trigger_output_mux [ 6 ] ) ,
MADERA_MUX_WIDGETS ( ISRC1DEC1 , " ISRC1DEC1 " ) ,
MADERA_MUX_WIDGETS ( ISRC1DEC2 , " ISRC1DEC2 " ) ,
MADERA_MUX_WIDGETS ( ISRC1DEC3 , " ISRC1DEC3 " ) ,
MADERA_MUX_WIDGETS ( ISRC1DEC4 , " ISRC1DEC4 " ) ,
MADERA_MUX_WIDGETS ( ISRC1INT1 , " ISRC1INT1 " ) ,
MADERA_MUX_WIDGETS ( ISRC1INT2 , " ISRC1INT2 " ) ,
MADERA_MUX_WIDGETS ( ISRC1INT3 , " ISRC1INT3 " ) ,
MADERA_MUX_WIDGETS ( ISRC1INT4 , " ISRC1INT4 " ) ,
MADERA_MUX_WIDGETS ( ISRC2DEC1 , " ISRC2DEC1 " ) ,
MADERA_MUX_WIDGETS ( ISRC2DEC2 , " ISRC2DEC2 " ) ,
MADERA_MUX_WIDGETS ( ISRC2DEC3 , " ISRC2DEC3 " ) ,
MADERA_MUX_WIDGETS ( ISRC2DEC4 , " ISRC2DEC4 " ) ,
MADERA_MUX_WIDGETS ( ISRC2INT1 , " ISRC2INT1 " ) ,
MADERA_MUX_WIDGETS ( ISRC2INT2 , " ISRC2INT2 " ) ,
MADERA_MUX_WIDGETS ( ISRC2INT3 , " ISRC2INT3 " ) ,
MADERA_MUX_WIDGETS ( ISRC2INT4 , " ISRC2INT4 " ) ,
MADERA_MUX_WIDGETS ( ISRC3DEC1 , " ISRC3DEC1 " ) ,
MADERA_MUX_WIDGETS ( ISRC3DEC2 , " ISRC3DEC2 " ) ,
MADERA_MUX_WIDGETS ( ISRC3INT1 , " ISRC3INT1 " ) ,
MADERA_MUX_WIDGETS ( ISRC3INT2 , " ISRC3INT2 " ) ,
MADERA_MUX_WIDGETS ( ISRC4DEC1 , " ISRC4DEC1 " ) ,
MADERA_MUX_WIDGETS ( ISRC4DEC2 , " ISRC4DEC2 " ) ,
MADERA_MUX_WIDGETS ( ISRC4INT1 , " ISRC4INT1 " ) ,
MADERA_MUX_WIDGETS ( ISRC4INT2 , " ISRC4INT2 " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT1L " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT1R " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT2L " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT2R " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT3L " ) ,
SND_SOC_DAPM_OUTPUT ( " HPOUT3R " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKOUTLN " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKOUTLP " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKOUTRN " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKOUTRP " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKDAT1L " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKDAT1R " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKDAT2L " ) ,
SND_SOC_DAPM_OUTPUT ( " SPKDAT2R " ) ,
SND_SOC_DAPM_OUTPUT ( " SPDIF1 " ) ,
SND_SOC_DAPM_OUTPUT ( " MICSUPP " ) ,
} ;
# define MADERA_MIXER_INPUT_ROUTES(name) \
{ name , " Noise Generator " , " Noise Generator " } , \
{ name , " Tone Generator 1 " , " Tone Generator 1 " } , \
{ name , " Tone Generator 2 " , " Tone Generator 2 " } , \
{ name , " Haptics " , " HAPTICS " } , \
{ name , " AEC1 " , " AEC1 Loopback " } , \
{ name , " AEC2 " , " AEC2 Loopback " } , \
{ name , " IN1L " , " IN1L " } , \
{ name , " IN1R " , " IN1R " } , \
{ name , " IN2L " , " IN2L " } , \
{ name , " IN2R " , " IN2R " } , \
{ name , " IN3L " , " IN3L " } , \
{ name , " IN3R " , " IN3R " } , \
{ name , " IN4L " , " IN4L " } , \
{ name , " IN4R " , " IN4R " } , \
{ name , " IN5L " , " IN5L " } , \
{ name , " IN5R " , " IN5R " } , \
{ name , " IN6L " , " IN6L " } , \
{ name , " IN6R " , " IN6R " } , \
{ name , " AIF1RX1 " , " AIF1RX1 " } , \
{ name , " AIF1RX2 " , " AIF1RX2 " } , \
{ name , " AIF1RX3 " , " AIF1RX3 " } , \
{ name , " AIF1RX4 " , " AIF1RX4 " } , \
{ name , " AIF1RX5 " , " AIF1RX5 " } , \
{ name , " AIF1RX6 " , " AIF1RX6 " } , \
{ name , " AIF1RX7 " , " AIF1RX7 " } , \
{ name , " AIF1RX8 " , " AIF1RX8 " } , \
{ name , " AIF2RX1 " , " AIF2RX1 " } , \
{ name , " AIF2RX2 " , " AIF2RX2 " } , \
{ name , " AIF2RX3 " , " AIF2RX3 " } , \
{ name , " AIF2RX4 " , " AIF2RX4 " } , \
{ name , " AIF2RX5 " , " AIF2RX5 " } , \
{ name , " AIF2RX6 " , " AIF2RX6 " } , \
{ name , " AIF2RX7 " , " AIF2RX7 " } , \
{ name , " AIF2RX8 " , " AIF2RX8 " } , \
{ name , " AIF3RX1 " , " AIF3RX1 " } , \
{ name , " AIF3RX2 " , " AIF3RX2 " } , \
{ name , " AIF4RX1 " , " AIF4RX1 " } , \
{ name , " AIF4RX2 " , " AIF4RX2 " } , \
{ name , " SLIMRX1 " , " SLIMRX1 " } , \
{ name , " SLIMRX2 " , " SLIMRX2 " } , \
{ name , " SLIMRX3 " , " SLIMRX3 " } , \
{ name , " SLIMRX4 " , " SLIMRX4 " } , \
{ name , " SLIMRX5 " , " SLIMRX5 " } , \
{ name , " SLIMRX6 " , " SLIMRX6 " } , \
{ name , " SLIMRX7 " , " SLIMRX7 " } , \
{ name , " SLIMRX8 " , " SLIMRX8 " } , \
{ name , " EQ1 " , " EQ1 " } , \
{ name , " EQ2 " , " EQ2 " } , \
{ name , " EQ3 " , " EQ3 " } , \
{ name , " EQ4 " , " EQ4 " } , \
{ name , " DRC1L " , " DRC1L " } , \
{ name , " DRC1R " , " DRC1R " } , \
{ name , " DRC2L " , " DRC2L " } , \
{ name , " DRC2R " , " DRC2R " } , \
{ name , " LHPF1 " , " LHPF1 " } , \
{ name , " LHPF2 " , " LHPF2 " } , \
{ name , " LHPF3 " , " LHPF3 " } , \
{ name , " LHPF4 " , " LHPF4 " } , \
{ name , " ASRC1IN1L " , " ASRC1IN1L " } , \
{ name , " ASRC1IN1R " , " ASRC1IN1R " } , \
{ name , " ASRC1IN2L " , " ASRC1IN2L " } , \
{ name , " ASRC1IN2R " , " ASRC1IN2R " } , \
{ name , " ASRC2IN1L " , " ASRC2IN1L " } , \
{ name , " ASRC2IN1R " , " ASRC2IN1R " } , \
{ name , " ASRC2IN2L " , " ASRC2IN2L " } , \
{ name , " ASRC2IN2R " , " ASRC2IN2R " } , \
{ name , " ISRC1DEC1 " , " ISRC1DEC1 " } , \
{ name , " ISRC1DEC2 " , " ISRC1DEC2 " } , \
{ name , " ISRC1DEC3 " , " ISRC1DEC3 " } , \
{ name , " ISRC1DEC4 " , " ISRC1DEC4 " } , \
{ name , " ISRC1INT1 " , " ISRC1INT1 " } , \
{ name , " ISRC1INT2 " , " ISRC1INT2 " } , \
{ name , " ISRC1INT3 " , " ISRC1INT3 " } , \
{ name , " ISRC1INT4 " , " ISRC1INT4 " } , \
{ name , " ISRC2DEC1 " , " ISRC2DEC1 " } , \
{ name , " ISRC2DEC2 " , " ISRC2DEC2 " } , \
{ name , " ISRC2DEC3 " , " ISRC2DEC3 " } , \
{ name , " ISRC2DEC4 " , " ISRC2DEC4 " } , \
{ name , " ISRC2INT1 " , " ISRC2INT1 " } , \
{ name , " ISRC2INT2 " , " ISRC2INT2 " } , \
{ name , " ISRC2INT3 " , " ISRC2INT3 " } , \
{ name , " ISRC2INT4 " , " ISRC2INT4 " } , \
{ name , " ISRC3DEC1 " , " ISRC3DEC1 " } , \
{ name , " ISRC3DEC2 " , " ISRC3DEC2 " } , \
{ name , " ISRC3INT1 " , " ISRC3INT1 " } , \
{ name , " ISRC3INT2 " , " ISRC3INT2 " } , \
{ name , " ISRC4DEC1 " , " ISRC4DEC1 " } , \
{ name , " ISRC4DEC2 " , " ISRC4DEC2 " } , \
{ name , " ISRC4INT1 " , " ISRC4INT1 " } , \
{ name , " ISRC4INT2 " , " ISRC4INT2 " } , \
{ name , " DSP1.1 " , " DSP1 " } , \
{ name , " DSP1.2 " , " DSP1 " } , \
{ name , " DSP1.3 " , " DSP1 " } , \
{ name , " DSP1.4 " , " DSP1 " } , \
{ name , " DSP1.5 " , " DSP1 " } , \
{ name , " DSP1.6 " , " DSP1 " } , \
{ name , " DSP2.1 " , " DSP2 " } , \
{ name , " DSP2.2 " , " DSP2 " } , \
{ name , " DSP2.3 " , " DSP2 " } , \
{ name , " DSP2.4 " , " DSP2 " } , \
{ name , " DSP2.5 " , " DSP2 " } , \
{ name , " DSP2.6 " , " DSP2 " } , \
{ name , " DSP3.1 " , " DSP3 " } , \
{ name , " DSP3.2 " , " DSP3 " } , \
{ name , " DSP3.3 " , " DSP3 " } , \
{ name , " DSP3.4 " , " DSP3 " } , \
{ name , " DSP3.5 " , " DSP3 " } , \
{ name , " DSP3.6 " , " DSP3 " } , \
{ name , " DSP4.1 " , " DSP4 " } , \
{ name , " DSP4.2 " , " DSP4 " } , \
{ name , " DSP4.3 " , " DSP4 " } , \
{ name , " DSP4.4 " , " DSP4 " } , \
{ name , " DSP4.5 " , " DSP4 " } , \
{ name , " DSP4.6 " , " DSP4 " } , \
{ name , " DSP5.1 " , " DSP5 " } , \
{ name , " DSP5.2 " , " DSP5 " } , \
{ name , " DSP5.3 " , " DSP5 " } , \
{ name , " DSP5.4 " , " DSP5 " } , \
{ name , " DSP5.5 " , " DSP5 " } , \
{ name , " DSP5.6 " , " DSP5 " } , \
{ name , " DSP6.1 " , " DSP6 " } , \
{ name , " DSP6.2 " , " DSP6 " } , \
{ name , " DSP6.3 " , " DSP6 " } , \
{ name , " DSP6.4 " , " DSP6 " } , \
{ name , " DSP6.5 " , " DSP6 " } , \
{ name , " DSP6.6 " , " DSP6 " } , \
{ name , " DSP7.1 " , " DSP7 " } , \
{ name , " DSP7.2 " , " DSP7 " } , \
{ name , " DSP7.3 " , " DSP7 " } , \
{ name , " DSP7.4 " , " DSP7 " } , \
{ name , " DSP7.5 " , " DSP7 " } , \
{ name , " DSP7.6 " , " DSP7 " }
static const struct snd_soc_dapm_route cs47l85_dapm_routes [ ] = {
/* Internal clock domains */
{ " EQ1 " , NULL , " FXCLK " } ,
{ " EQ2 " , NULL , " FXCLK " } ,
{ " EQ3 " , NULL , " FXCLK " } ,
{ " EQ4 " , NULL , " FXCLK " } ,
{ " DRC1L " , NULL , " FXCLK " } ,
{ " DRC1R " , NULL , " FXCLK " } ,
{ " DRC2L " , NULL , " FXCLK " } ,
{ " DRC2R " , NULL , " FXCLK " } ,
{ " LHPF1 " , NULL , " FXCLK " } ,
{ " LHPF2 " , NULL , " FXCLK " } ,
{ " LHPF3 " , NULL , " FXCLK " } ,
{ " LHPF4 " , NULL , " FXCLK " } ,
{ " PWM1 Mixer " , NULL , " PWMCLK " } ,
{ " PWM2 Mixer " , NULL , " PWMCLK " } ,
{ " OUT1L " , NULL , " OUTCLK " } ,
{ " OUT1R " , NULL , " OUTCLK " } ,
{ " OUT2L " , NULL , " OUTCLK " } ,
{ " OUT2R " , NULL , " OUTCLK " } ,
{ " OUT3L " , NULL , " OUTCLK " } ,
{ " OUT3R " , NULL , " OUTCLK " } ,
{ " OUT4L " , NULL , " OUTCLK " } ,
{ " OUT4R " , NULL , " OUTCLK " } ,
{ " OUT5L " , NULL , " OUTCLK " } ,
{ " OUT5R " , NULL , " OUTCLK " } ,
{ " OUT6L " , NULL , " OUTCLK " } ,
{ " OUT6R " , NULL , " OUTCLK " } ,
{ " AIF1TX1 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX2 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX3 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX4 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX5 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX6 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX7 " , NULL , " AIF1TXCLK " } ,
{ " AIF1TX8 " , NULL , " AIF1TXCLK " } ,
{ " AIF2TX1 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX2 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX3 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX4 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX5 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX6 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX7 " , NULL , " AIF2TXCLK " } ,
{ " AIF2TX8 " , NULL , " AIF2TXCLK " } ,
{ " AIF3TX1 " , NULL , " AIF3TXCLK " } ,
{ " AIF3TX2 " , NULL , " AIF3TXCLK " } ,
{ " AIF4TX1 " , NULL , " AIF4TXCLK " } ,
{ " AIF4TX2 " , NULL , " AIF4TXCLK " } ,
{ " SLIMTX1 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX2 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX3 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX4 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX5 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX6 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX7 " , NULL , " SLIMBUSCLK " } ,
{ " SLIMTX8 " , NULL , " SLIMBUSCLK " } ,
{ " SPD1TX1 " , NULL , " SPDCLK " } ,
{ " SPD1TX2 " , NULL , " SPDCLK " } ,
{ " DSP1 " , NULL , " DSP1CLK " } ,
{ " DSP2 " , NULL , " DSP2CLK " } ,
{ " DSP3 " , NULL , " DSP3CLK " } ,
{ " DSP4 " , NULL , " DSP4CLK " } ,
{ " DSP5 " , NULL , " DSP5CLK " } ,
{ " DSP6 " , NULL , " DSP6CLK " } ,
{ " DSP7 " , NULL , " DSP7CLK " } ,
{ " ISRC1DEC1 " , NULL , " ISRC1CLK " } ,
{ " ISRC1DEC2 " , NULL , " ISRC1CLK " } ,
{ " ISRC1DEC3 " , NULL , " ISRC1CLK " } ,
{ " ISRC1DEC4 " , NULL , " ISRC1CLK " } ,
{ " ISRC1INT1 " , NULL , " ISRC1CLK " } ,
{ " ISRC1INT2 " , NULL , " ISRC1CLK " } ,
{ " ISRC1INT3 " , NULL , " ISRC1CLK " } ,
{ " ISRC1INT4 " , NULL , " ISRC1CLK " } ,
{ " ISRC2DEC1 " , NULL , " ISRC2CLK " } ,
{ " ISRC2DEC2 " , NULL , " ISRC2CLK " } ,
{ " ISRC2DEC3 " , NULL , " ISRC2CLK " } ,
{ " ISRC2DEC4 " , NULL , " ISRC2CLK " } ,
{ " ISRC2INT1 " , NULL , " ISRC2CLK " } ,
{ " ISRC2INT2 " , NULL , " ISRC2CLK " } ,
{ " ISRC2INT3 " , NULL , " ISRC2CLK " } ,
{ " ISRC2INT4 " , NULL , " ISRC2CLK " } ,
{ " ISRC3DEC1 " , NULL , " ISRC3CLK " } ,
{ " ISRC3DEC2 " , NULL , " ISRC3CLK " } ,
{ " ISRC3INT1 " , NULL , " ISRC3CLK " } ,
{ " ISRC3INT2 " , NULL , " ISRC3CLK " } ,
{ " ISRC4DEC1 " , NULL , " ISRC4CLK " } ,
{ " ISRC4DEC2 " , NULL , " ISRC4CLK " } ,
{ " ISRC4INT1 " , NULL , " ISRC4CLK " } ,
{ " ISRC4INT2 " , NULL , " ISRC4CLK " } ,
{ " ASRC1IN1L " , NULL , " ASRC1CLK " } ,
{ " ASRC1IN1R " , NULL , " ASRC1CLK " } ,
{ " ASRC1IN2L " , NULL , " ASRC1CLK " } ,
{ " ASRC1IN2R " , NULL , " ASRC1CLK " } ,
{ " ASRC2IN1L " , NULL , " ASRC2CLK " } ,
{ " ASRC2IN1R " , NULL , " ASRC2CLK " } ,
{ " ASRC2IN2L " , NULL , " ASRC2CLK " } ,
{ " ASRC2IN2R " , NULL , " ASRC2CLK " } ,
{ " AIF2 Capture " , NULL , " DBVDD2 " } ,
{ " AIF2 Playback " , NULL , " DBVDD2 " } ,
{ " AIF3 Capture " , NULL , " DBVDD3 " } ,
{ " AIF3 Playback " , NULL , " DBVDD3 " } ,
{ " AIF4 Capture " , NULL , " DBVDD3 " } ,
{ " AIF4 Playback " , NULL , " DBVDD3 " } ,
{ " OUT1L " , NULL , " CPVDD1 " } ,
{ " OUT1L " , NULL , " CPVDD2 " } ,
{ " OUT1R " , NULL , " CPVDD1 " } ,
{ " OUT1R " , NULL , " CPVDD2 " } ,
{ " OUT2L " , NULL , " CPVDD1 " } ,
{ " OUT2L " , NULL , " CPVDD2 " } ,
{ " OUT2R " , NULL , " CPVDD1 " } ,
{ " OUT2R " , NULL , " CPVDD2 " } ,
{ " OUT3L " , NULL , " CPVDD1 " } ,
{ " OUT3L " , NULL , " CPVDD2 " } ,
{ " OUT3R " , NULL , " CPVDD1 " } ,
{ " OUT3R " , NULL , " CPVDD2 " } ,
{ " OUT4L " , NULL , " SPKVDDL " } ,
{ " OUT4R " , NULL , " SPKVDDR " } ,
{ " OUT1L " , NULL , " SYSCLK " } ,
{ " OUT1R " , NULL , " SYSCLK " } ,
{ " OUT2L " , NULL , " SYSCLK " } ,
{ " OUT2R " , NULL , " SYSCLK " } ,
{ " OUT3L " , NULL , " SYSCLK " } ,
{ " OUT3R " , NULL , " SYSCLK " } ,
{ " OUT4L " , NULL , " SYSCLK " } ,
{ " OUT4R " , NULL , " SYSCLK " } ,
{ " OUT5L " , NULL , " SYSCLK " } ,
{ " OUT5R " , NULL , " SYSCLK " } ,
{ " OUT6L " , NULL , " SYSCLK " } ,
{ " OUT6R " , NULL , " SYSCLK " } ,
{ " SPD1 " , NULL , " SYSCLK " } ,
{ " SPD1 " , NULL , " SPD1TX1 " } ,
{ " SPD1 " , NULL , " SPD1TX2 " } ,
{ " IN1L " , NULL , " SYSCLK " } ,
{ " IN1R " , NULL , " SYSCLK " } ,
{ " IN2L " , NULL , " SYSCLK " } ,
{ " IN2R " , NULL , " SYSCLK " } ,
{ " IN3L " , NULL , " SYSCLK " } ,
{ " IN3R " , NULL , " SYSCLK " } ,
{ " IN4L " , NULL , " SYSCLK " } ,
{ " IN4R " , NULL , " SYSCLK " } ,
{ " IN5L " , NULL , " SYSCLK " } ,
{ " IN5R " , NULL , " SYSCLK " } ,
{ " IN6L " , NULL , " SYSCLK " } ,
{ " IN6R " , NULL , " SYSCLK " } ,
{ " IN4L " , NULL , " DBVDD4 " } ,
{ " IN4R " , NULL , " DBVDD4 " } ,
{ " IN5L " , NULL , " DBVDD4 " } ,
{ " IN5R " , NULL , " DBVDD4 " } ,
{ " IN6L " , NULL , " DBVDD4 " } ,
{ " IN6R " , NULL , " DBVDD4 " } ,
{ " ASRC1IN1L " , NULL , " SYSCLK " } ,
{ " ASRC1IN1R " , NULL , " SYSCLK " } ,
{ " ASRC1IN2L " , NULL , " SYSCLK " } ,
{ " ASRC1IN2R " , NULL , " SYSCLK " } ,
{ " ASRC2IN1L " , NULL , " SYSCLK " } ,
{ " ASRC2IN1R " , NULL , " SYSCLK " } ,
{ " ASRC2IN2L " , NULL , " SYSCLK " } ,
{ " ASRC2IN2R " , NULL , " SYSCLK " } ,
{ " ASRC1IN1L " , NULL , " ASYNCCLK " } ,
{ " ASRC1IN1R " , NULL , " ASYNCCLK " } ,
{ " ASRC1IN2L " , NULL , " ASYNCCLK " } ,
{ " ASRC1IN2R " , NULL , " ASYNCCLK " } ,
{ " ASRC2IN1L " , NULL , " ASYNCCLK " } ,
{ " ASRC2IN1R " , NULL , " ASYNCCLK " } ,
{ " ASRC2IN2L " , NULL , " ASYNCCLK " } ,
{ " ASRC2IN2R " , NULL , " ASYNCCLK " } ,
{ " MICBIAS1 " , NULL , " MICVDD " } ,
{ " MICBIAS2 " , NULL , " MICVDD " } ,
{ " MICBIAS3 " , NULL , " MICVDD " } ,
{ " MICBIAS4 " , NULL , " MICVDD " } ,
{ " Noise Generator " , NULL , " SYSCLK " } ,
{ " Tone Generator 1 " , NULL , " SYSCLK " } ,
{ " Tone Generator 2 " , NULL , " SYSCLK " } ,
{ " Noise Generator " , NULL , " NOISE " } ,
{ " Tone Generator 1 " , NULL , " TONE " } ,
{ " Tone Generator 2 " , NULL , " TONE " } ,
{ " AIF1 Capture " , NULL , " AIF1TX1 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX2 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX3 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX4 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX5 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX6 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX7 " } ,
{ " AIF1 Capture " , NULL , " AIF1TX8 " } ,
{ " AIF1RX1 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX2 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX3 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX4 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX5 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX6 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX7 " , NULL , " AIF1 Playback " } ,
{ " AIF1RX8 " , NULL , " AIF1 Playback " } ,
{ " AIF2 Capture " , NULL , " AIF2TX1 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX2 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX3 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX4 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX5 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX6 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX7 " } ,
{ " AIF2 Capture " , NULL , " AIF2TX8 " } ,
{ " AIF2RX1 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX2 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX3 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX4 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX5 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX6 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX7 " , NULL , " AIF2 Playback " } ,
{ " AIF2RX8 " , NULL , " AIF2 Playback " } ,
{ " AIF3 Capture " , NULL , " AIF3TX1 " } ,
{ " AIF3 Capture " , NULL , " AIF3TX2 " } ,
{ " AIF3RX1 " , NULL , " AIF3 Playback " } ,
{ " AIF3RX2 " , NULL , " AIF3 Playback " } ,
{ " AIF4 Capture " , NULL , " AIF4TX1 " } ,
{ " AIF4 Capture " , NULL , " AIF4TX2 " } ,
{ " AIF4RX1 " , NULL , " AIF4 Playback " } ,
{ " AIF4RX2 " , NULL , " AIF4 Playback " } ,
{ " Slim1 Capture " , NULL , " SLIMTX1 " } ,
{ " Slim1 Capture " , NULL , " SLIMTX2 " } ,
{ " Slim1 Capture " , NULL , " SLIMTX3 " } ,
{ " Slim1 Capture " , NULL , " SLIMTX4 " } ,
{ " SLIMRX1 " , NULL , " Slim1 Playback " } ,
{ " SLIMRX2 " , NULL , " Slim1 Playback " } ,
{ " SLIMRX3 " , NULL , " Slim1 Playback " } ,
{ " SLIMRX4 " , NULL , " Slim1 Playback " } ,
{ " Slim2 Capture " , NULL , " SLIMTX5 " } ,
{ " Slim2 Capture " , NULL , " SLIMTX6 " } ,
{ " SLIMRX5 " , NULL , " Slim2 Playback " } ,
{ " SLIMRX6 " , NULL , " Slim2 Playback " } ,
{ " Slim3 Capture " , NULL , " SLIMTX7 " } ,
{ " Slim3 Capture " , NULL , " SLIMTX8 " } ,
{ " SLIMRX7 " , NULL , " Slim3 Playback " } ,
{ " SLIMRX8 " , NULL , " Slim3 Playback " } ,
{ " AIF1 Playback " , NULL , " SYSCLK " } ,
{ " AIF2 Playback " , NULL , " SYSCLK " } ,
{ " AIF3 Playback " , NULL , " SYSCLK " } ,
{ " AIF4 Playback " , NULL , " SYSCLK " } ,
{ " Slim1 Playback " , NULL , " SYSCLK " } ,
{ " Slim2 Playback " , NULL , " SYSCLK " } ,
{ " Slim3 Playback " , NULL , " SYSCLK " } ,
{ " AIF1 Capture " , NULL , " SYSCLK " } ,
{ " AIF2 Capture " , NULL , " SYSCLK " } ,
{ " AIF3 Capture " , NULL , " SYSCLK " } ,
{ " AIF4 Capture " , NULL , " SYSCLK " } ,
{ " Slim1 Capture " , NULL , " SYSCLK " } ,
{ " Slim2 Capture " , NULL , " SYSCLK " } ,
{ " Slim3 Capture " , NULL , " SYSCLK " } ,
{ " Voice Control DSP " , NULL , " DSP6 " } ,
{ " Audio Trace DSP " , NULL , " DSP1 " } ,
{ " IN1L Analog Mux " , " A " , " IN1ALN " } ,
{ " IN1L Analog Mux " , " A " , " IN1ALP " } ,
{ " IN1L Analog Mux " , " B " , " IN1BN " } ,
{ " IN1L Analog Mux " , " B " , " IN1BP " } ,
{ " IN1L Mode " , " Analog " , " IN1L Analog Mux " } ,
{ " IN1R Mode " , " Analog " , " IN1RN " } ,
{ " IN1R Mode " , " Analog " , " IN1RP " } ,
{ " IN1L Mode " , " Digital " , " IN1ALN " } ,
{ " IN1L Mode " , " Digital " , " IN1RN " } ,
{ " IN1R Mode " , " Digital " , " IN1ALN " } ,
{ " IN1R Mode " , " Digital " , " IN1RN " } ,
{ " IN1L " , NULL , " IN1L Mode " } ,
{ " IN1R " , NULL , " IN1R Mode " } ,
{ " IN2L Analog Mux " , " A " , " IN2ALN " } ,
{ " IN2L Analog Mux " , " A " , " IN2ALP " } ,
{ " IN2L Analog Mux " , " B " , " IN2BLN " } ,
{ " IN2L Analog Mux " , " B " , " IN2BLP " } ,
{ " IN2R Analog Mux " , " A " , " IN2ARN " } ,
{ " IN2R Analog Mux " , " A " , " IN2ARP " } ,
{ " IN2R Analog Mux " , " B " , " IN2BRN " } ,
{ " IN2R Analog Mux " , " B " , " IN2BRP " } ,
{ " IN2L Mode " , " Analog " , " IN2L Analog Mux " } ,
{ " IN2R Mode " , " Analog " , " IN2R Analog Mux " } ,
{ " IN2L Mode " , " Digital " , " IN2ALN " } ,
{ " IN2L Mode " , " Digital " , " IN2ARN " } ,
{ " IN2R Mode " , " Digital " , " IN2ALN " } ,
{ " IN2R Mode " , " Digital " , " IN2ARN " } ,
{ " IN2L " , NULL , " IN2L Mode " } ,
{ " IN2R " , NULL , " IN2R Mode " } ,
{ " IN3L Mode " , " Analog " , " IN3LN " } ,
{ " IN3L Mode " , " Analog " , " IN3LP " } ,
{ " IN3R Mode " , " Analog " , " IN3RN " } ,
{ " IN3R Mode " , " Analog " , " IN3RP " } ,
{ " IN3L Mode " , " Digital " , " IN3LN " } ,
{ " IN3L Mode " , " Digital " , " IN3RN " } ,
{ " IN3R Mode " , " Digital " , " IN3LN " } ,
{ " IN3R Mode " , " Digital " , " IN3RN " } ,
{ " IN3L " , NULL , " IN3L Mode " } ,
{ " IN3R " , NULL , " IN3R Mode " } ,
{ " IN4L " , NULL , " DMICCLK4 " } ,
2020-01-22 13:41:43 +03:00
{ " IN4L " , NULL , " DMICDAT4 " } ,
{ " IN4R " , NULL , " DMICCLK4 " } ,
2019-06-19 16:41:58 +03:00
{ " IN4R " , NULL , " DMICDAT4 " } ,
{ " IN5L " , NULL , " DMICCLK5 " } ,
2020-01-22 13:41:43 +03:00
{ " IN5L " , NULL , " DMICDAT5 " } ,
{ " IN5R " , NULL , " DMICCLK5 " } ,
2019-06-19 16:41:58 +03:00
{ " IN5R " , NULL , " DMICDAT5 " } ,
{ " IN6L " , NULL , " DMICCLK6 " } ,
2020-01-22 13:41:43 +03:00
{ " IN6L " , NULL , " DMICDAT6 " } ,
{ " IN6R " , NULL , " DMICCLK6 " } ,
2019-06-19 16:41:58 +03:00
{ " IN6R " , NULL , " DMICDAT6 " } ,
MADERA_MIXER_ROUTES ( " OUT1L " , " HPOUT1L " ) ,
MADERA_MIXER_ROUTES ( " OUT1R " , " HPOUT1R " ) ,
MADERA_MIXER_ROUTES ( " OUT2L " , " HPOUT2L " ) ,
MADERA_MIXER_ROUTES ( " OUT2R " , " HPOUT2R " ) ,
MADERA_MIXER_ROUTES ( " OUT3L " , " HPOUT3L " ) ,
MADERA_MIXER_ROUTES ( " OUT3R " , " HPOUT3R " ) ,
MADERA_MIXER_ROUTES ( " OUT4L " , " SPKOUTL " ) ,
MADERA_MIXER_ROUTES ( " OUT4R " , " SPKOUTR " ) ,
MADERA_MIXER_ROUTES ( " OUT5L " , " SPKDAT1L " ) ,
MADERA_MIXER_ROUTES ( " OUT5R " , " SPKDAT1R " ) ,
MADERA_MIXER_ROUTES ( " OUT6L " , " SPKDAT2L " ) ,
MADERA_MIXER_ROUTES ( " OUT6R " , " SPKDAT2R " ) ,
MADERA_MIXER_ROUTES ( " PWM1 Driver " , " PWM1 " ) ,
MADERA_MIXER_ROUTES ( " PWM2 Driver " , " PWM2 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX1 " , " AIF1TX1 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX2 " , " AIF1TX2 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX3 " , " AIF1TX3 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX4 " , " AIF1TX4 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX5 " , " AIF1TX5 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX6 " , " AIF1TX6 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX7 " , " AIF1TX7 " ) ,
MADERA_MIXER_ROUTES ( " AIF1TX8 " , " AIF1TX8 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX1 " , " AIF2TX1 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX2 " , " AIF2TX2 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX3 " , " AIF2TX3 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX4 " , " AIF2TX4 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX5 " , " AIF2TX5 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX6 " , " AIF2TX6 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX7 " , " AIF2TX7 " ) ,
MADERA_MIXER_ROUTES ( " AIF2TX8 " , " AIF2TX8 " ) ,
MADERA_MIXER_ROUTES ( " AIF3TX1 " , " AIF3TX1 " ) ,
MADERA_MIXER_ROUTES ( " AIF3TX2 " , " AIF3TX2 " ) ,
MADERA_MIXER_ROUTES ( " AIF4TX1 " , " AIF4TX1 " ) ,
MADERA_MIXER_ROUTES ( " AIF4TX2 " , " AIF4TX2 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX1 " , " SLIMTX1 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX2 " , " SLIMTX2 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX3 " , " SLIMTX3 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX4 " , " SLIMTX4 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX5 " , " SLIMTX5 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX6 " , " SLIMTX6 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX7 " , " SLIMTX7 " ) ,
MADERA_MIXER_ROUTES ( " SLIMTX8 " , " SLIMTX8 " ) ,
MADERA_MUX_ROUTES ( " SPD1TX1 " , " SPDIF1TX1 " ) ,
MADERA_MUX_ROUTES ( " SPD1TX2 " , " SPDIF1TX2 " ) ,
MADERA_MIXER_ROUTES ( " EQ1 " , " EQ1 " ) ,
MADERA_MIXER_ROUTES ( " EQ2 " , " EQ2 " ) ,
MADERA_MIXER_ROUTES ( " EQ3 " , " EQ3 " ) ,
MADERA_MIXER_ROUTES ( " EQ4 " , " EQ4 " ) ,
MADERA_MIXER_ROUTES ( " DRC1L " , " DRC1L " ) ,
MADERA_MIXER_ROUTES ( " DRC1R " , " DRC1R " ) ,
MADERA_MIXER_ROUTES ( " DRC2L " , " DRC2L " ) ,
MADERA_MIXER_ROUTES ( " DRC2R " , " DRC2R " ) ,
MADERA_MIXER_ROUTES ( " LHPF1 " , " LHPF1 " ) ,
MADERA_MIXER_ROUTES ( " LHPF2 " , " LHPF2 " ) ,
MADERA_MIXER_ROUTES ( " LHPF3 " , " LHPF3 " ) ,
MADERA_MIXER_ROUTES ( " LHPF4 " , " LHPF4 " ) ,
MADERA_MUX_ROUTES ( " ASRC1IN1L " , " ASRC1IN1L " ) ,
MADERA_MUX_ROUTES ( " ASRC1IN1R " , " ASRC1IN1R " ) ,
MADERA_MUX_ROUTES ( " ASRC1IN2L " , " ASRC1IN2L " ) ,
MADERA_MUX_ROUTES ( " ASRC1IN2R " , " ASRC1IN2R " ) ,
MADERA_MUX_ROUTES ( " ASRC2IN1L " , " ASRC2IN1L " ) ,
MADERA_MUX_ROUTES ( " ASRC2IN1R " , " ASRC2IN1R " ) ,
MADERA_MUX_ROUTES ( " ASRC2IN2L " , " ASRC2IN2L " ) ,
MADERA_MUX_ROUTES ( " ASRC2IN2R " , " ASRC2IN2R " ) ,
MADERA_DSP_ROUTES ( " DSP1 " ) ,
MADERA_DSP_ROUTES ( " DSP2 " ) ,
MADERA_DSP_ROUTES ( " DSP3 " ) ,
MADERA_DSP_ROUTES ( " DSP4 " ) ,
MADERA_DSP_ROUTES ( " DSP5 " ) ,
MADERA_DSP_ROUTES ( " DSP6 " ) ,
MADERA_DSP_ROUTES ( " DSP7 " ) ,
{ " DSP Trigger Out " , NULL , " DSP1 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP2 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP3 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP4 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP5 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP6 Trigger Output " } ,
{ " DSP Trigger Out " , NULL , " DSP7 Trigger Output " } ,
{ " DSP1 Trigger Output " , " Switch " , " DSP1 " } ,
{ " DSP2 Trigger Output " , " Switch " , " DSP2 " } ,
{ " DSP3 Trigger Output " , " Switch " , " DSP3 " } ,
{ " DSP4 Trigger Output " , " Switch " , " DSP4 " } ,
{ " DSP5 Trigger Output " , " Switch " , " DSP5 " } ,
{ " DSP6 Trigger Output " , " Switch " , " DSP6 " } ,
{ " DSP7 Trigger Output " , " Switch " , " DSP7 " } ,
MADERA_MUX_ROUTES ( " ISRC1INT1 " , " ISRC1INT1 " ) ,
MADERA_MUX_ROUTES ( " ISRC1INT2 " , " ISRC1INT2 " ) ,
MADERA_MUX_ROUTES ( " ISRC1INT3 " , " ISRC1INT3 " ) ,
MADERA_MUX_ROUTES ( " ISRC1INT4 " , " ISRC1INT4 " ) ,
MADERA_MUX_ROUTES ( " ISRC1DEC1 " , " ISRC1DEC1 " ) ,
MADERA_MUX_ROUTES ( " ISRC1DEC2 " , " ISRC1DEC2 " ) ,
MADERA_MUX_ROUTES ( " ISRC1DEC3 " , " ISRC1DEC3 " ) ,
MADERA_MUX_ROUTES ( " ISRC1DEC4 " , " ISRC1DEC4 " ) ,
MADERA_MUX_ROUTES ( " ISRC2INT1 " , " ISRC2INT1 " ) ,
MADERA_MUX_ROUTES ( " ISRC2INT2 " , " ISRC2INT2 " ) ,
MADERA_MUX_ROUTES ( " ISRC2INT3 " , " ISRC2INT3 " ) ,
MADERA_MUX_ROUTES ( " ISRC2INT4 " , " ISRC2INT4 " ) ,
MADERA_MUX_ROUTES ( " ISRC2DEC1 " , " ISRC2DEC1 " ) ,
MADERA_MUX_ROUTES ( " ISRC2DEC2 " , " ISRC2DEC2 " ) ,
MADERA_MUX_ROUTES ( " ISRC2DEC3 " , " ISRC2DEC3 " ) ,
MADERA_MUX_ROUTES ( " ISRC2DEC4 " , " ISRC2DEC4 " ) ,
MADERA_MUX_ROUTES ( " ISRC3INT1 " , " ISRC3INT1 " ) ,
MADERA_MUX_ROUTES ( " ISRC3INT2 " , " ISRC3INT2 " ) ,
MADERA_MUX_ROUTES ( " ISRC3DEC1 " , " ISRC3DEC1 " ) ,
MADERA_MUX_ROUTES ( " ISRC3DEC2 " , " ISRC3DEC2 " ) ,
MADERA_MUX_ROUTES ( " ISRC4INT1 " , " ISRC4INT1 " ) ,
MADERA_MUX_ROUTES ( " ISRC4INT2 " , " ISRC4INT2 " ) ,
MADERA_MUX_ROUTES ( " ISRC4DEC1 " , " ISRC4DEC1 " ) ,
MADERA_MUX_ROUTES ( " ISRC4DEC2 " , " ISRC4DEC2 " ) ,
{ " AEC1 Loopback " , " HPOUT1L " , " OUT1L " } ,
{ " AEC1 Loopback " , " HPOUT1R " , " OUT1R " } ,
{ " AEC2 Loopback " , " HPOUT1L " , " OUT1L " } ,
{ " AEC2 Loopback " , " HPOUT1R " , " OUT1R " } ,
{ " HPOUT1L " , NULL , " OUT1L " } ,
{ " HPOUT1R " , NULL , " OUT1R " } ,
{ " AEC1 Loopback " , " HPOUT2L " , " OUT2L " } ,
{ " AEC1 Loopback " , " HPOUT2R " , " OUT2R " } ,
{ " AEC2 Loopback " , " HPOUT2L " , " OUT2L " } ,
{ " AEC2 Loopback " , " HPOUT2R " , " OUT2R " } ,
{ " HPOUT2L " , NULL , " OUT2L " } ,
{ " HPOUT2R " , NULL , " OUT2R " } ,
{ " AEC1 Loopback " , " HPOUT3L " , " OUT3L " } ,
{ " AEC1 Loopback " , " HPOUT3R " , " OUT3R " } ,
{ " AEC2 Loopback " , " HPOUT3L " , " OUT3L " } ,
{ " AEC2 Loopback " , " HPOUT3R " , " OUT3R " } ,
{ " HPOUT3L " , NULL , " OUT3L " } ,
{ " HPOUT3R " , NULL , " OUT3R " } ,
{ " AEC1 Loopback " , " SPKOUTL " , " OUT4L " } ,
{ " AEC2 Loopback " , " SPKOUTL " , " OUT4L " } ,
{ " SPKOUTLN " , NULL , " OUT4L " } ,
{ " SPKOUTLP " , NULL , " OUT4L " } ,
{ " AEC1 Loopback " , " SPKOUTR " , " OUT4R " } ,
{ " AEC2 Loopback " , " SPKOUTR " , " OUT4R " } ,
{ " SPKOUTRN " , NULL , " OUT4R " } ,
{ " SPKOUTRP " , NULL , " OUT4R " } ,
{ " AEC1 Loopback " , " SPKDAT1L " , " OUT5L " } ,
{ " AEC1 Loopback " , " SPKDAT1R " , " OUT5R " } ,
{ " AEC2 Loopback " , " SPKDAT1L " , " OUT5L " } ,
{ " AEC2 Loopback " , " SPKDAT1R " , " OUT5R " } ,
{ " SPKDAT1L " , NULL , " OUT5L " } ,
{ " SPKDAT1R " , NULL , " OUT5R " } ,
{ " AEC1 Loopback " , " SPKDAT2L " , " OUT6L " } ,
{ " AEC1 Loopback " , " SPKDAT2R " , " OUT6R " } ,
{ " AEC2 Loopback " , " SPKDAT2L " , " OUT6L " } ,
{ " AEC2 Loopback " , " SPKDAT2R " , " OUT6R " } ,
{ " SPKDAT2L " , NULL , " OUT6L " } ,
{ " SPKDAT2R " , NULL , " OUT6R " } ,
CS47L85_RXANC_INPUT_ROUTES ( " RXANCL " , " RXANCL " ) ,
CS47L85_RXANC_INPUT_ROUTES ( " RXANCR " , " RXANCR " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT1L " , " HPOUT1L " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT1R " , " HPOUT1R " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT2L " , " HPOUT2L " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT2R " , " HPOUT2R " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT3L " , " HPOUT3L " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT3R " , " HPOUT3R " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT4L " , " SPKOUTL " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT4R " , " SPKOUTR " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT5L " , " SPKDAT1L " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT5R " , " SPKDAT1R " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT6L " , " SPKDAT2L " ) ,
CS47L85_RXANC_OUTPUT_ROUTES ( " OUT6R " , " SPKDAT2R " ) ,
{ " SPDIF1 " , NULL , " SPD1 " } ,
{ " MICSUPP " , NULL , " SYSCLK " } ,
{ " DRC1 Signal Activity " , NULL , " DRC1 Activity Output " } ,
{ " DRC2 Signal Activity " , NULL , " DRC2 Activity Output " } ,
{ " DRC1 Activity Output " , " Switch " , " DRC1L " } ,
{ " DRC1 Activity Output " , " Switch " , " DRC1R " } ,
{ " DRC2 Activity Output " , " Switch " , " DRC2L " } ,
{ " DRC2 Activity Output " , " Switch " , " DRC2R " } ,
} ;
static int cs47l85_set_fll ( struct snd_soc_component * component , int fll_id ,
int source , unsigned int fref , unsigned int fout )
{
struct cs47l85 * cs47l85 = snd_soc_component_get_drvdata ( component ) ;
switch ( fll_id ) {
case MADERA_FLL1_REFCLK :
return madera_set_fll_refclk ( & cs47l85 - > fll [ 0 ] , source , fref ,
fout ) ;
case MADERA_FLL2_REFCLK :
return madera_set_fll_refclk ( & cs47l85 - > fll [ 1 ] , source , fref ,
fout ) ;
case MADERA_FLL3_REFCLK :
return madera_set_fll_refclk ( & cs47l85 - > fll [ 2 ] , source , fref ,
fout ) ;
case MADERA_FLL1_SYNCCLK :
return madera_set_fll_syncclk ( & cs47l85 - > fll [ 0 ] , source , fref ,
fout ) ;
case MADERA_FLL2_SYNCCLK :
return madera_set_fll_syncclk ( & cs47l85 - > fll [ 1 ] , source , fref ,
fout ) ;
case MADERA_FLL3_SYNCCLK :
return madera_set_fll_syncclk ( & cs47l85 - > fll [ 2 ] , source , fref ,
fout ) ;
default :
return - EINVAL ;
}
}
static struct snd_soc_dai_driver cs47l85_dai [ ] = {
{
. name = " cs47l85-aif1 " ,
. id = 1 ,
. base = MADERA_AIF1_BCLK_CTRL ,
. playback = {
. stream_name = " AIF1 Playback " ,
. channels_min = 1 ,
. channels_max = 8 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " AIF1 Capture " ,
. channels_min = 1 ,
. channels_max = 8 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_dai_ops ,
2021-01-15 07:54:48 +03:00
. symmetric_rate = 1 ,
. symmetric_sample_bits = 1 ,
2019-06-19 16:41:58 +03:00
} ,
{
. name = " cs47l85-aif2 " ,
. id = 2 ,
. base = MADERA_AIF2_BCLK_CTRL ,
. playback = {
. stream_name = " AIF2 Playback " ,
. channels_min = 1 ,
. channels_max = 8 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " AIF2 Capture " ,
. channels_min = 1 ,
. channels_max = 8 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_dai_ops ,
2021-01-15 07:54:48 +03:00
. symmetric_rate = 1 ,
. symmetric_sample_bits = 1 ,
2019-06-19 16:41:58 +03:00
} ,
{
. name = " cs47l85-aif3 " ,
. id = 3 ,
. base = MADERA_AIF3_BCLK_CTRL ,
. playback = {
. stream_name = " AIF3 Playback " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " AIF3 Capture " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_dai_ops ,
2021-01-15 07:54:48 +03:00
. symmetric_rate = 1 ,
. symmetric_sample_bits = 1 ,
2019-06-19 16:41:58 +03:00
} ,
{
. name = " cs47l85-aif4 " ,
. id = 4 ,
. base = MADERA_AIF4_BCLK_CTRL ,
. playback = {
. stream_name = " AIF4 Playback " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " AIF4 Capture " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_dai_ops ,
2021-01-15 07:54:48 +03:00
. symmetric_rate = 1 ,
. symmetric_sample_bits = 1 ,
2019-06-19 16:41:58 +03:00
} ,
{
. name = " cs47l85-slim1 " ,
. id = 5 ,
. playback = {
. stream_name = " Slim1 Playback " ,
. channels_min = 1 ,
. channels_max = 4 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " Slim1 Capture " ,
. channels_min = 1 ,
. channels_max = 4 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_simple_dai_ops ,
} ,
{
. name = " cs47l85-slim2 " ,
. id = 6 ,
. playback = {
. stream_name = " Slim2 Playback " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " Slim2 Capture " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_simple_dai_ops ,
} ,
{
. name = " cs47l85-slim3 " ,
. id = 7 ,
. playback = {
. stream_name = " Slim3 Playback " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. capture = {
. stream_name = " Slim3 Capture " ,
. channels_min = 1 ,
. channels_max = 2 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. ops = & madera_simple_dai_ops ,
} ,
{
. name = " cs47l85-cpu-voicectrl " ,
. capture = {
. stream_name = " Voice Control CPU " ,
. channels_min = 1 ,
. channels_max = 1 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. compress_new = & snd_soc_new_compress ,
} ,
{
. name = " cs47l85-dsp-voicectrl " ,
. capture = {
. stream_name = " Voice Control DSP " ,
. channels_min = 1 ,
. channels_max = 1 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
} ,
{
. name = " cs47l85-cpu-trace " ,
. capture = {
. stream_name = " Audio Trace CPU " ,
. channels_min = 1 ,
. channels_max = 6 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
. compress_new = & snd_soc_new_compress ,
} ,
{
. name = " cs47l85-dsp-trace " ,
. capture = {
. stream_name = " Audio Trace DSP " ,
. channels_min = 1 ,
. channels_max = 6 ,
. rates = MADERA_RATES ,
. formats = MADERA_FORMATS ,
} ,
} ,
} ;
2020-04-20 10:08:13 +03:00
static int cs47l85_open ( struct snd_soc_component * component ,
struct snd_compr_stream * stream )
2019-06-19 16:41:58 +03:00
{
struct snd_soc_pcm_runtime * rtd = stream - > private_data ;
struct cs47l85 * cs47l85 = snd_soc_component_get_drvdata ( component ) ;
struct madera_priv * priv = & cs47l85 - > core ;
struct madera * madera = priv - > madera ;
int n_adsp ;
2020-03-23 08:21:56 +03:00
if ( strcmp ( asoc_rtd_to_codec ( rtd , 0 ) - > name , " cs47l85-dsp-voicectrl " ) = = 0 ) {
2019-06-19 16:41:58 +03:00
n_adsp = 5 ;
2020-03-23 08:21:56 +03:00
} else if ( strcmp ( asoc_rtd_to_codec ( rtd , 0 ) - > name , " cs47l85-dsp-trace " ) = = 0 ) {
2019-06-19 16:41:58 +03:00
n_adsp = 0 ;
} else {
dev_err ( madera - > dev ,
" No suitable compressed stream for DAI '%s' \n " ,
2020-03-23 08:21:56 +03:00
asoc_rtd_to_codec ( rtd , 0 ) - > name ) ;
2019-06-19 16:41:58 +03:00
return - EINVAL ;
}
return wm_adsp_compr_open ( & priv - > adsp [ n_adsp ] , stream ) ;
}
static irqreturn_t cs47l85_adsp2_irq ( int irq , void * data )
{
struct cs47l85 * cs47l85 = data ;
struct madera_priv * priv = & cs47l85 - > core ;
struct madera * madera = priv - > madera ;
struct madera_voice_trigger_info trig_info ;
int serviced = 0 ;
int i , ret ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; + + i ) {
ret = wm_adsp_compr_handle_irq ( & priv - > adsp [ i ] ) ;
if ( ret ! = - ENODEV )
serviced + + ;
if ( ret = = WM_ADSP_COMPR_VOICE_TRIGGER ) {
trig_info . core_num = i + 1 ;
blocking_notifier_call_chain ( & madera - > notifier ,
MADERA_NOTIFY_VOICE_TRIGGER ,
& trig_info ) ;
}
}
if ( ! serviced ) {
dev_err ( madera - > dev , " Spurious compressed data IRQ \n " ) ;
return IRQ_NONE ;
}
return IRQ_HANDLED ;
}
static int cs47l85_component_probe ( struct snd_soc_component * component )
{
struct cs47l85 * cs47l85 = snd_soc_component_get_drvdata ( component ) ;
struct madera * madera = cs47l85 - > core . madera ;
int i , ret ;
snd_soc_component_init_regmap ( component , madera - > regmap ) ;
mutex_lock ( & madera - > dapm_ptr_lock ) ;
madera - > dapm = snd_soc_component_get_dapm ( component ) ;
mutex_unlock ( & madera - > dapm_ptr_lock ) ;
ret = madera_init_inputs ( component ) ;
if ( ret )
return ret ;
2020-01-14 19:18:41 +03:00
ret = madera_init_outputs ( component , NULL , CS47L85_MONO_OUTPUTS ,
CS47L85_MONO_OUTPUTS ) ;
2019-06-19 16:41:58 +03:00
if ( ret )
return ret ;
snd_soc_component_disable_pin ( component , " HAPTICS " ) ;
ret = snd_soc_add_component_controls ( component ,
madera_adsp_rate_controls ,
CS47L85_NUM_ADSP ) ;
if ( ret )
return ret ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; i + + )
wm_adsp2_component_probe ( & cs47l85 - > core . adsp [ i ] , component ) ;
return 0 ;
}
static void cs47l85_component_remove ( struct snd_soc_component * component )
{
struct cs47l85 * cs47l85 = snd_soc_component_get_drvdata ( component ) ;
struct madera * madera = cs47l85 - > core . madera ;
int i ;
mutex_lock ( & madera - > dapm_ptr_lock ) ;
madera - > dapm = NULL ;
mutex_unlock ( & madera - > dapm_ptr_lock ) ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; i + + )
wm_adsp2_component_remove ( & cs47l85 - > core . adsp [ i ] , component ) ;
}
# define MADERA_DIG_VU 0x0200
static const unsigned int cs47l85_digital_vu [ ] = {
MADERA_DAC_DIGITAL_VOLUME_1L ,
MADERA_DAC_DIGITAL_VOLUME_1R ,
MADERA_DAC_DIGITAL_VOLUME_2L ,
MADERA_DAC_DIGITAL_VOLUME_2R ,
MADERA_DAC_DIGITAL_VOLUME_3L ,
MADERA_DAC_DIGITAL_VOLUME_3R ,
MADERA_DAC_DIGITAL_VOLUME_4L ,
MADERA_DAC_DIGITAL_VOLUME_4R ,
MADERA_DAC_DIGITAL_VOLUME_5L ,
MADERA_DAC_DIGITAL_VOLUME_5R ,
MADERA_DAC_DIGITAL_VOLUME_6L ,
MADERA_DAC_DIGITAL_VOLUME_6R ,
} ;
2020-04-20 10:08:13 +03:00
static const struct snd_compress_ops cs47l85_compress_ops = {
2019-06-19 16:41:58 +03:00
. open = & cs47l85_open ,
. free = & wm_adsp_compr_free ,
. set_params = & wm_adsp_compr_set_params ,
. get_caps = & wm_adsp_compr_get_caps ,
. trigger = & wm_adsp_compr_trigger ,
. pointer = & wm_adsp_compr_pointer ,
. copy = & wm_adsp_compr_copy ,
} ;
static const struct snd_soc_component_driver soc_component_dev_cs47l85 = {
. probe = & cs47l85_component_probe ,
. remove = & cs47l85_component_remove ,
. set_sysclk = & madera_set_sysclk ,
. set_pll = & cs47l85_set_fll ,
. name = DRV_NAME ,
2020-04-20 10:08:13 +03:00
. compress_ops = & cs47l85_compress_ops ,
2019-06-19 16:41:58 +03:00
. controls = cs47l85_snd_controls ,
. num_controls = ARRAY_SIZE ( cs47l85_snd_controls ) ,
. dapm_widgets = cs47l85_dapm_widgets ,
. num_dapm_widgets = ARRAY_SIZE ( cs47l85_dapm_widgets ) ,
. dapm_routes = cs47l85_dapm_routes ,
. num_dapm_routes = ARRAY_SIZE ( cs47l85_dapm_routes ) ,
. use_pmdown_time = 1 ,
. endianness = 1 ,
. non_legacy_dai_naming = 1 ,
} ;
static int cs47l85_probe ( struct platform_device * pdev )
{
struct madera * madera = dev_get_drvdata ( pdev - > dev . parent ) ;
struct cs47l85 * cs47l85 ;
int i , ret ;
BUILD_BUG_ON ( ARRAY_SIZE ( cs47l85_dai ) > MADERA_MAX_DAI ) ;
/* quick exit if Madera irqchip driver hasn't completed probe */
if ( ! madera - > irq_dev ) {
dev_dbg ( & pdev - > dev , " irqchip driver not ready \n " ) ;
return - EPROBE_DEFER ;
}
cs47l85 = devm_kzalloc ( & pdev - > dev , sizeof ( struct cs47l85 ) ,
GFP_KERNEL ) ;
if ( ! cs47l85 )
return - ENOMEM ;
platform_set_drvdata ( pdev , cs47l85 ) ;
cs47l85 - > core . madera = madera ;
cs47l85 - > core . dev = & pdev - > dev ;
cs47l85 - > core . num_inputs = 12 ;
ret = madera_core_init ( & cs47l85 - > core ) ;
if ( ret )
return ret ;
ret = madera_init_overheat ( & cs47l85 - > core ) ;
if ( ret )
goto error_core ;
ret = madera_request_irq ( madera , MADERA_IRQ_DSP_IRQ1 ,
" ADSP2 Compressed IRQ " , cs47l85_adsp2_irq ,
cs47l85 ) ;
if ( ret ) {
dev_err ( & pdev - > dev , " Failed to request DSP IRQ: %d \n " , ret ) ;
goto error_overheat ;
}
ret = madera_set_irq_wake ( madera , MADERA_IRQ_DSP_IRQ1 , 1 ) ;
if ( ret )
dev_warn ( & pdev - > dev , " Failed to set DSP IRQ wake: %d \n " , ret ) ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; i + + ) {
cs47l85 - > core . adsp [ i ] . part = " cs47l85 " ;
2021-09-13 19:00:55 +03:00
cs47l85 - > core . adsp [ i ] . cs_dsp . num = i + 1 ;
cs47l85 - > core . adsp [ i ] . cs_dsp . type = WMFW_ADSP2 ;
cs47l85 - > core . adsp [ i ] . cs_dsp . rev = 1 ;
cs47l85 - > core . adsp [ i ] . cs_dsp . dev = madera - > dev ;
cs47l85 - > core . adsp [ i ] . cs_dsp . regmap = madera - > regmap_32bit ;
cs47l85 - > core . adsp [ i ] . cs_dsp . base = wm_adsp2_control_bases [ i ] ;
cs47l85 - > core . adsp [ i ] . cs_dsp . mem = cs47l85_dsp_regions [ i ] ;
cs47l85 - > core . adsp [ i ] . cs_dsp . num_mems =
2019-06-19 16:41:58 +03:00
ARRAY_SIZE ( cs47l85_dsp1_regions ) ;
ret = wm_adsp2_init ( & cs47l85 - > core . adsp [ i ] ) ;
if ( ret ) {
for ( - - i ; i > = 0 ; - - i )
wm_adsp2_remove ( & cs47l85 - > core . adsp [ i ] ) ;
goto error_dsp_irq ;
}
}
madera_init_fll ( madera , 1 , MADERA_FLL1_CONTROL_1 - 1 ,
& cs47l85 - > fll [ 0 ] ) ;
madera_init_fll ( madera , 2 , MADERA_FLL2_CONTROL_1 - 1 ,
& cs47l85 - > fll [ 1 ] ) ;
madera_init_fll ( madera , 3 , MADERA_FLL3_CONTROL_1 - 1 ,
& cs47l85 - > fll [ 2 ] ) ;
for ( i = 0 ; i < ARRAY_SIZE ( cs47l85_dai ) ; i + + )
madera_init_dai ( & cs47l85 - > core , i ) ;
/* Latch volume update bits */
for ( i = 0 ; i < ARRAY_SIZE ( cs47l85_digital_vu ) ; i + + )
regmap_update_bits ( madera - > regmap , cs47l85_digital_vu [ i ] ,
MADERA_DIG_VU , MADERA_DIG_VU ) ;
pm_runtime_enable ( & pdev - > dev ) ;
pm_runtime_idle ( & pdev - > dev ) ;
ret = devm_snd_soc_register_component ( & pdev - > dev ,
& soc_component_dev_cs47l85 ,
cs47l85_dai ,
ARRAY_SIZE ( cs47l85_dai ) ) ;
if ( ret < 0 ) {
dev_err ( & pdev - > dev , " Failed to register component: %d \n " , ret ) ;
goto error_pm_runtime ;
}
return ret ;
error_pm_runtime :
pm_runtime_disable ( & pdev - > dev ) ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; i + + )
wm_adsp2_remove ( & cs47l85 - > core . adsp [ i ] ) ;
error_dsp_irq :
madera_set_irq_wake ( madera , MADERA_IRQ_DSP_IRQ1 , 0 ) ;
madera_free_irq ( madera , MADERA_IRQ_DSP_IRQ1 , cs47l85 ) ;
error_overheat :
madera_free_overheat ( & cs47l85 - > core ) ;
error_core :
madera_core_free ( & cs47l85 - > core ) ;
return ret ;
}
static int cs47l85_remove ( struct platform_device * pdev )
{
struct cs47l85 * cs47l85 = platform_get_drvdata ( pdev ) ;
int i ;
pm_runtime_disable ( & pdev - > dev ) ;
for ( i = 0 ; i < CS47L85_NUM_ADSP ; i + + )
wm_adsp2_remove ( & cs47l85 - > core . adsp [ i ] ) ;
madera_set_irq_wake ( cs47l85 - > core . madera , MADERA_IRQ_DSP_IRQ1 , 0 ) ;
madera_free_irq ( cs47l85 - > core . madera , MADERA_IRQ_DSP_IRQ1 , cs47l85 ) ;
madera_free_overheat ( & cs47l85 - > core ) ;
madera_core_free ( & cs47l85 - > core ) ;
return 0 ;
}
static struct platform_driver cs47l85_codec_driver = {
. driver = {
. name = " cs47l85-codec " ,
} ,
. probe = & cs47l85_probe ,
. remove = & cs47l85_remove ,
} ;
module_platform_driver ( cs47l85_codec_driver ) ;
MODULE_SOFTDEP ( " pre: madera irq-madera arizona-micsupp " ) ;
MODULE_DESCRIPTION ( " ASoC CS47L85 driver " ) ;
MODULE_AUTHOR ( " Nariman Poushin <nariman@opensource.cirrus.com> " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;
MODULE_ALIAS ( " platform:cs47l85-codec " ) ;