aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm5102.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2013-01-10 09:45:58 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-03-21 13:54:18 -0400
commit56447e1324009d7e3cec40e3cc2987843b59a00f (patch)
tree5a06797850248ded279d40655c85c0a1d2ca2f95 /sound/soc/codecs/wm5102.c
parent4f1b07581613bf076b0dacdd9a3fb290d3caa227 (diff)
ASoC: arizona: Factor out speaker widgets from CODEC drivers
Some system designs have been identified which repurpose portions of the speaker driver circuits for other functions which will require that they not be managed using DAPM. Prepare for this by factoring out the creation of the speaker widgets into the core driver, the widgets will be replaced by dummy ones when the additional functions are enabled. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm5102.c')
-rw-r--r--sound/soc/codecs/wm5102.c52
1 files changed, 2 insertions, 50 deletions
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index 44d4c69d25e5..97757bc5fd0e 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -36,9 +36,6 @@
36struct wm5102_priv { 36struct wm5102_priv {
37 struct arizona_priv core; 37 struct arizona_priv core;
38 struct arizona_fll fll[2]; 38 struct arizona_fll fll[2];
39
40 unsigned int spk_ena:2;
41 unsigned int spk_ena_pending:1;
42}; 39};
43 40
44static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); 41static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
@@ -817,47 +814,6 @@ ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
817ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), 814ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
818}; 815};
819 816
820static int wm5102_spk_ev(struct snd_soc_dapm_widget *w,
821 struct snd_kcontrol *kcontrol,
822 int event)
823{
824 struct snd_soc_codec *codec = w->codec;
825 struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
826 struct wm5102_priv *wm5102 = snd_soc_codec_get_drvdata(codec);
827
828 if (arizona->rev < 1)
829 return 0;
830
831 switch (event) {
832 case SND_SOC_DAPM_PRE_PMU:
833 if (!wm5102->spk_ena) {
834 snd_soc_write(codec, 0x4f5, 0x25a);
835 wm5102->spk_ena_pending = true;
836 }
837 break;
838 case SND_SOC_DAPM_POST_PMU:
839 if (wm5102->spk_ena_pending) {
840 msleep(75);
841 snd_soc_write(codec, 0x4f5, 0xda);
842 wm5102->spk_ena_pending = false;
843 wm5102->spk_ena++;
844 }
845 break;
846 case SND_SOC_DAPM_PRE_PMD:
847 wm5102->spk_ena--;
848 if (!wm5102->spk_ena)
849 snd_soc_write(codec, 0x4f5, 0x25a);
850 break;
851 case SND_SOC_DAPM_POST_PMD:
852 if (!wm5102->spk_ena)
853 snd_soc_write(codec, 0x4f5, 0x0da);
854 break;
855 }
856
857 return 0;
858}
859
860
861ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); 817ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);
862ARIZONA_MIXER_ENUMS(EQ2, ARIZONA_EQ2MIX_INPUT_1_SOURCE); 818ARIZONA_MIXER_ENUMS(EQ2, ARIZONA_EQ2MIX_INPUT_1_SOURCE);
863ARIZONA_MIXER_ENUMS(EQ3, ARIZONA_EQ3MIX_INPUT_1_SOURCE); 819ARIZONA_MIXER_ENUMS(EQ3, ARIZONA_EQ3MIX_INPUT_1_SOURCE);
@@ -1141,12 +1097,6 @@ SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
1141SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, 1097SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
1142 ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1098 ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
1143 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), 1099 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1144SND_SOC_DAPM_PGA_E("OUT4L", ARIZONA_OUTPUT_ENABLES_1,
1145 ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, wm5102_spk_ev,
1146 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1147SND_SOC_DAPM_PGA_E("OUT4R", ARIZONA_OUTPUT_ENABLES_1,
1148 ARIZONA_OUT4R_ENA_SHIFT, 0, NULL, 0, wm5102_spk_ev,
1149 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1150SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, 1100SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
1151 ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1101 ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
1152 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), 1102 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
@@ -1586,6 +1536,8 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
1586 if (ret != 0) 1536 if (ret != 0)
1587 return ret; 1537 return ret;
1588 1538
1539 arizona_init_spk(codec);
1540
1589 snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); 1541 snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS");
1590 1542
1591 priv->core.arizona->dapm = &codec->dapm; 1543 priv->core.arizona->dapm = &codec->dapm;