aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-11-20 10:20:30 -0500
committerMark Brown <broonie@linaro.org>2013-11-20 10:20:30 -0500
commitc33ef2c9ed870901cdadf367ffc4423b90257e5f (patch)
tree3e1d38f248f78e7f26272fb343c6f2fdb75722db /sound/soc/codecs
parent8b880f48eef80309da6d1c40f7526614b19ab12c (diff)
parent3e68ce1bc72e5d6615677ec5a8b0a9bcb6c7a490 (diff)
Merge remote-tracking branch 'asoc/fix/arizona' into asoc-linus
Diffstat (limited to 'sound/soc/codecs')
-rw-r--r--sound/soc/codecs/arizona.c4
-rw-r--r--sound/soc/codecs/wm5110.c43
2 files changed, 46 insertions, 1 deletions
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index 6f05b17d1965..fea991031be1 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1529,6 +1529,8 @@ static void arizona_enable_fll(struct arizona_fll *fll,
1529 try_wait_for_completion(&fll->ok); 1529 try_wait_for_completion(&fll->ok);
1530 1530
1531 regmap_update_bits(arizona->regmap, fll->base + 1, 1531 regmap_update_bits(arizona->regmap, fll->base + 1,
1532 ARIZONA_FLL1_FREERUN, 0);
1533 regmap_update_bits(arizona->regmap, fll->base + 1,
1532 ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA); 1534 ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
1533 if (use_sync) 1535 if (use_sync)
1534 regmap_update_bits(arizona->regmap, fll->base + 0x11, 1536 regmap_update_bits(arizona->regmap, fll->base + 0x11,
@@ -1546,6 +1548,8 @@ static void arizona_disable_fll(struct arizona_fll *fll)
1546 struct arizona *arizona = fll->arizona; 1548 struct arizona *arizona = fll->arizona;
1547 bool change; 1549 bool change;
1548 1550
1551 regmap_update_bits(arizona->regmap, fll->base + 1,
1552 ARIZONA_FLL1_FREERUN, ARIZONA_FLL1_FREERUN);
1549 regmap_update_bits_check(arizona->regmap, fll->base + 1, 1553 regmap_update_bits_check(arizona->regmap, fll->base + 1,
1550 ARIZONA_FLL1_ENA, 0, &change); 1554 ARIZONA_FLL1_ENA, 0, &change);
1551 regmap_update_bits(arizona->regmap, fll->base + 0x11, 1555 regmap_update_bits(arizona->regmap, fll->base + 0x11,
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index bbd64384ca1c..0048ce5bfa2f 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -37,6 +37,47 @@ struct wm5110_priv {
37 struct arizona_fll fll[2]; 37 struct arizona_fll fll[2];
38}; 38};
39 39
40static const struct reg_default wm5110_sysclk_revd_patch[] = {
41 { 0x3093, 0x1001 },
42 { 0x30E3, 0x1301 },
43 { 0x3133, 0x1201 },
44 { 0x3183, 0x1501 },
45 { 0x31D3, 0x1401 },
46};
47
48static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
49 struct snd_kcontrol *kcontrol, int event)
50{
51 struct snd_soc_codec *codec = w->codec;
52 struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
53 struct regmap *regmap = codec->control_data;
54 const struct reg_default *patch = NULL;
55 int i, patch_size;
56
57 switch (arizona->rev) {
58 case 3:
59 patch = wm5110_sysclk_revd_patch;
60 patch_size = ARRAY_SIZE(wm5110_sysclk_revd_patch);
61 break;
62 default:
63 return 0;
64 }
65
66 switch (event) {
67 case SND_SOC_DAPM_POST_PMU:
68 if (patch)
69 for (i = 0; i < patch_size; i++)
70 regmap_write(regmap, patch[i].reg,
71 patch[i].def);
72 break;
73
74 default:
75 break;
76 }
77
78 return 0;
79}
80
40static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); 81static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
41static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); 82static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
42static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); 83static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
@@ -400,7 +441,7 @@ static const struct snd_kcontrol_new wm5110_aec_loopback_mux =
400 441
401static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = { 442static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = {
402SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT, 443SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,
403 0, NULL, 0), 444 0, wm5110_sysclk_ev, SND_SOC_DAPM_POST_PMU),
404SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1, 445SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,
405 ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0), 446 ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),
406SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK, 447SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,