aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2013-01-04 16:30:16 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-01-04 16:30:16 -0500
commit66b6eaf23adc77c7a74d0a7149eb49fbca187a9c (patch)
treef35e31f06fe0582cff8dfeb6225b95fd1d309284
parentbc9ab6d31c4fde1016ecc6606913ed0d52b3ed76 (diff)
parentd71753e22b24548911b377db28f80870cf50d07b (diff)
Merge branch 'fix/arizona' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-arizona
-rw-r--r--sound/soc/codecs/arizona.c9
-rw-r--r--sound/soc/codecs/arizona.h18
-rw-r--r--sound/soc/codecs/wm5102.c48
3 files changed, 57 insertions, 18 deletions
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index bcd225853eb5..5afc8110ae3a 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -503,15 +503,9 @@ static int arizona_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
503 case SND_SOC_DAIFMT_DSP_A: 503 case SND_SOC_DAIFMT_DSP_A:
504 mode = 0; 504 mode = 0;
505 break; 505 break;
506 case SND_SOC_DAIFMT_DSP_B:
507 mode = 1;
508 break;
509 case SND_SOC_DAIFMT_I2S: 506 case SND_SOC_DAIFMT_I2S:
510 mode = 2; 507 mode = 2;
511 break; 508 break;
512 case SND_SOC_DAIFMT_LEFT_J:
513 mode = 3;
514 break;
515 default: 509 default:
516 arizona_aif_err(dai, "Unsupported DAI format %d\n", 510 arizona_aif_err(dai, "Unsupported DAI format %d\n",
517 fmt & SND_SOC_DAIFMT_FORMAT_MASK); 511 fmt & SND_SOC_DAIFMT_FORMAT_MASK);
@@ -771,7 +765,8 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
771 snd_soc_update_bits(codec, ARIZONA_ASYNC_SAMPLE_RATE_1, 765 snd_soc_update_bits(codec, ARIZONA_ASYNC_SAMPLE_RATE_1,
772 ARIZONA_ASYNC_SAMPLE_RATE_MASK, sr_val); 766 ARIZONA_ASYNC_SAMPLE_RATE_MASK, sr_val);
773 snd_soc_update_bits(codec, base + ARIZONA_AIF_RATE_CTRL, 767 snd_soc_update_bits(codec, base + ARIZONA_AIF_RATE_CTRL,
774 ARIZONA_AIF1_RATE_MASK, 8); 768 ARIZONA_AIF1_RATE_MASK,
769 8 << ARIZONA_AIF1_RATE_SHIFT);
775 break; 770 break;
776 default: 771 default:
777 arizona_aif_err(dai, "Invalid clock %d\n", dai_priv->clk); 772 arizona_aif_err(dai, "Invalid clock %d\n", dai_priv->clk);
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
index 0973fd9bd9a7..697ff6fcaba4 100644
--- a/sound/soc/codecs/arizona.h
+++ b/sound/soc/codecs/arizona.h
@@ -34,15 +34,15 @@
34 34
35#define ARIZONA_FLL_SRC_MCLK1 0 35#define ARIZONA_FLL_SRC_MCLK1 0
36#define ARIZONA_FLL_SRC_MCLK2 1 36#define ARIZONA_FLL_SRC_MCLK2 1
37#define ARIZONA_FLL_SRC_SLIMCLK 2 37#define ARIZONA_FLL_SRC_SLIMCLK 3
38#define ARIZONA_FLL_SRC_FLL1 3 38#define ARIZONA_FLL_SRC_FLL1 4
39#define ARIZONA_FLL_SRC_FLL2 4 39#define ARIZONA_FLL_SRC_FLL2 5
40#define ARIZONA_FLL_SRC_AIF1BCLK 5 40#define ARIZONA_FLL_SRC_AIF1BCLK 8
41#define ARIZONA_FLL_SRC_AIF2BCLK 6 41#define ARIZONA_FLL_SRC_AIF2BCLK 9
42#define ARIZONA_FLL_SRC_AIF3BCLK 7 42#define ARIZONA_FLL_SRC_AIF3BCLK 10
43#define ARIZONA_FLL_SRC_AIF1LRCLK 8 43#define ARIZONA_FLL_SRC_AIF1LRCLK 12
44#define ARIZONA_FLL_SRC_AIF2LRCLK 9 44#define ARIZONA_FLL_SRC_AIF2LRCLK 13
45#define ARIZONA_FLL_SRC_AIF3LRCLK 10 45#define ARIZONA_FLL_SRC_AIF3LRCLK 14
46 46
47#define ARIZONA_MIXER_VOL_MASK 0x00FE 47#define ARIZONA_MIXER_VOL_MASK 0x00FE
48#define ARIZONA_MIXER_VOL_SHIFT 1 48#define ARIZONA_MIXER_VOL_SHIFT 1
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index 04ceb6d587c2..803d6db0eb69 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -36,6 +36,9 @@
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;
39}; 42};
40 43
41static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); 44static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
@@ -827,6 +830,47 @@ ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
827ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), 830ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
828}; 831};
829 832
833static int wm5102_spk_ev(struct snd_soc_dapm_widget *w,
834 struct snd_kcontrol *kcontrol,
835 int event)
836{
837 struct snd_soc_codec *codec = w->codec;
838 struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
839 struct wm5102_priv *wm5102 = snd_soc_codec_get_drvdata(codec);
840
841 if (arizona->rev < 1)
842 return 0;
843
844 switch (event) {
845 case SND_SOC_DAPM_PRE_PMU:
846 if (!wm5102->spk_ena) {
847 snd_soc_write(codec, 0x4f5, 0x25a);
848 wm5102->spk_ena_pending = true;
849 }
850 break;
851 case SND_SOC_DAPM_POST_PMU:
852 if (wm5102->spk_ena_pending) {
853 msleep(75);
854 snd_soc_write(codec, 0x4f5, 0xda);
855 wm5102->spk_ena_pending = false;
856 wm5102->spk_ena++;
857 }
858 break;
859 case SND_SOC_DAPM_PRE_PMD:
860 wm5102->spk_ena--;
861 if (!wm5102->spk_ena)
862 snd_soc_write(codec, 0x4f5, 0x25a);
863 break;
864 case SND_SOC_DAPM_POST_PMD:
865 if (!wm5102->spk_ena)
866 snd_soc_write(codec, 0x4f5, 0x0da);
867 break;
868 }
869
870 return 0;
871}
872
873
830ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); 874ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);
831ARIZONA_MIXER_ENUMS(EQ2, ARIZONA_EQ2MIX_INPUT_1_SOURCE); 875ARIZONA_MIXER_ENUMS(EQ2, ARIZONA_EQ2MIX_INPUT_1_SOURCE);
832ARIZONA_MIXER_ENUMS(EQ3, ARIZONA_EQ3MIX_INPUT_1_SOURCE); 876ARIZONA_MIXER_ENUMS(EQ3, ARIZONA_EQ3MIX_INPUT_1_SOURCE);
@@ -1106,10 +1150,10 @@ SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
1106 ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1150 ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
1107 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), 1151 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1108SND_SOC_DAPM_PGA_E("OUT4L", ARIZONA_OUTPUT_ENABLES_1, 1152SND_SOC_DAPM_PGA_E("OUT4L", ARIZONA_OUTPUT_ENABLES_1,
1109 ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1153 ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, wm5102_spk_ev,
1110 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), 1154 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1111SND_SOC_DAPM_PGA_E("OUT4R", ARIZONA_OUTPUT_ENABLES_1, 1155SND_SOC_DAPM_PGA_E("OUT4R", ARIZONA_OUTPUT_ENABLES_1,
1112 ARIZONA_OUT4R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1156 ARIZONA_OUT4R_ENA_SHIFT, 0, NULL, 0, wm5102_spk_ev,
1113 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), 1157 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1114SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, 1158SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
1115 ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, 1159 ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,