diff options
Diffstat (limited to 'sound/soc/codecs/wm5110.c')
| -rw-r--r-- | sound/soc/codecs/wm5110.c | 69 | 
1 files changed, 56 insertions, 13 deletions
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index 9211e4192f7..c57dc746830 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c @@ -84,11 +84,23 @@ SOC_DOUBLE_R_TLV("IN4 Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_4L,  		 ARIZONA_ADC_DIGITAL_VOLUME_4R, ARIZONA_IN4L_DIG_VOL_SHIFT,  		 0xbf, 0, digital_tlv), +SOC_ENUM("Input Ramp Up", arizona_in_vi_ramp), +SOC_ENUM("Input Ramp Down", arizona_in_vd_ramp), +  ARIZONA_MIXER_CONTROLS("EQ1", ARIZONA_EQ1MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("EQ2", ARIZONA_EQ2MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("EQ3", ARIZONA_EQ3MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("EQ4", ARIZONA_EQ4MIX_INPUT_1_SOURCE), +SND_SOC_BYTES_MASK("EQ1 Coefficeints", ARIZONA_EQ1_1, 21, +		   ARIZONA_EQ1_ENA_MASK), +SND_SOC_BYTES_MASK("EQ2 Coefficeints", ARIZONA_EQ2_1, 21, +		   ARIZONA_EQ2_ENA_MASK), +SND_SOC_BYTES_MASK("EQ3 Coefficeints", ARIZONA_EQ3_1, 21, +		   ARIZONA_EQ3_ENA_MASK), +SND_SOC_BYTES_MASK("EQ4 Coefficeints", ARIZONA_EQ4_1, 21, +		   ARIZONA_EQ4_ENA_MASK), +  SOC_SINGLE_TLV("EQ1 B1 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B1_GAIN_SHIFT,  	       24, 0, eq_tlv),  SOC_SINGLE_TLV("EQ1 B2 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B2_GAIN_SHIFT, @@ -148,6 +160,11 @@ ARIZONA_MIXER_CONTROLS("LHPF2", ARIZONA_HPLP2MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE), +SND_SOC_BYTES("LHPF1 Coefficients", ARIZONA_HPLPF1_2, 1), +SND_SOC_BYTES("LHPF2 Coefficients", ARIZONA_HPLPF2_2, 1), +SND_SOC_BYTES("LHPF3 Coefficients", ARIZONA_HPLPF3_2, 1), +SND_SOC_BYTES("LHPF4 Coefficients", ARIZONA_HPLPF4_2, 1), +  SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode),  SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),  SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), @@ -243,6 +260,9 @@ SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT,  SOC_DOUBLE("SPKDAT2 Switch", ARIZONA_PDM_SPK2_CTRL_1, ARIZONA_SPK2L_MUTE_SHIFT,  	   ARIZONA_SPK2R_MUTE_SHIFT, 1, 1), +SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), +SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), +  ARIZONA_MIXER_CONTROLS("AIF1TX1", ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("AIF1TX2", ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE),  ARIZONA_MIXER_CONTROLS("AIF1TX3", ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE), @@ -308,10 +328,10 @@ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE);  ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE);  ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); -ARIZONA_MIXER_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); -ARIZONA_MIXER_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); -ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); -ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); +ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); +ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); +ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); +ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE);  static const char *wm5110_aec_loopback_texts[] = {  	"HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R", @@ -352,6 +372,7 @@ SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0, 0),  SND_SOC_DAPM_SIGGEN("TONE"),  SND_SOC_DAPM_SIGGEN("NOISE"), +SND_SOC_DAPM_SIGGEN("HAPTICS"),  SND_SOC_DAPM_INPUT("IN1L"),  SND_SOC_DAPM_INPUT("IN1R"), @@ -585,10 +606,10 @@ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),  ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),  ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), -ARIZONA_MIXER_WIDGETS(ASRC1L, "ASRC1L"), -ARIZONA_MIXER_WIDGETS(ASRC1R, "ASRC1R"), -ARIZONA_MIXER_WIDGETS(ASRC2L, "ASRC2L"), -ARIZONA_MIXER_WIDGETS(ASRC2R, "ASRC2R"), +ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), +ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), +ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), +ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"),  SND_SOC_DAPM_OUTPUT("HPOUT1L"),  SND_SOC_DAPM_OUTPUT("HPOUT1R"), @@ -610,6 +631,7 @@ SND_SOC_DAPM_OUTPUT("SPKDAT2R"),  	{ name, "Noise Generator", "Noise Generator" }, \  	{ name, "Tone Generator 1", "Tone Generator 1" }, \  	{ name, "Tone Generator 2", "Tone Generator 2" }, \ +	{ name, "Haptics", "HAPTICS" }, \  	{ name, "AEC", "AEC Loopback" }, \  	{ name, "IN1L", "IN1L PGA" }, \  	{ name, "IN1R", "IN1R PGA" }, \ @@ -786,10 +808,10 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {  	ARIZONA_MIXER_ROUTES("LHPF3", "LHPF3"),  	ARIZONA_MIXER_ROUTES("LHPF4", "LHPF4"), -	ARIZONA_MIXER_ROUTES("ASRC1L", "ASRC1L"), -	ARIZONA_MIXER_ROUTES("ASRC1R", "ASRC1R"), -	ARIZONA_MIXER_ROUTES("ASRC2L", "ASRC2L"), -	ARIZONA_MIXER_ROUTES("ASRC2R", "ASRC2R"), +	ARIZONA_MUX_ROUTES("ASRC1L"), +	ARIZONA_MUX_ROUTES("ASRC1R"), +	ARIZONA_MUX_ROUTES("ASRC2L"), +	ARIZONA_MUX_ROUTES("ASRC2R"),  	{ "HPOUT1L", NULL, "OUT1L" },  	{ "HPOUT1R", NULL, "OUT1R" }, @@ -902,9 +924,29 @@ static struct snd_soc_dai_driver wm5110_dai[] = {  static int wm5110_codec_probe(struct snd_soc_codec *codec)  {  	struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec); +	int ret;  	codec->control_data = priv->core.arizona->regmap; -	return snd_soc_codec_set_cache_io(codec, 32, 16, SND_SOC_REGMAP); +	priv->core.arizona->dapm = &codec->dapm; + +	ret = snd_soc_codec_set_cache_io(codec, 32, 16, SND_SOC_REGMAP); +	if (ret != 0) +		return ret; + +	snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); + +	priv->core.arizona->dapm = &codec->dapm; + +	return 0; +} + +static int wm5110_codec_remove(struct snd_soc_codec *codec) +{ +	struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec); + +	priv->core.arizona->dapm = NULL; + +	return 0;  }  #define WM5110_DIG_VU 0x0200 @@ -935,6 +977,7 @@ static unsigned int wm5110_digital_vu[] = {  static struct snd_soc_codec_driver soc_codec_dev_wm5110 = {  	.probe = wm5110_codec_probe, +	.remove = wm5110_codec_remove,  	.idle_bias_off = true,  |