diff options
| author | Mark Brown <broonie@linaro.org> | 2013-11-20 10:20:30 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2013-11-20 10:20:30 -0500 |
| commit | c33ef2c9ed870901cdadf367ffc4423b90257e5f (patch) | |
| tree | 3e1d38f248f78e7f26272fb343c6f2fdb75722db | |
| parent | 8b880f48eef80309da6d1c40f7526614b19ab12c (diff) | |
| parent | 3e68ce1bc72e5d6615677ec5a8b0a9bcb6c7a490 (diff) | |
Merge remote-tracking branch 'asoc/fix/arizona' into asoc-linus
| -rw-r--r-- | sound/soc/codecs/arizona.c | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/wm5110.c | 43 |
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 | ||
| 40 | static 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 | |||
| 48 | static 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 | |||
| 40 | static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); | 81 | static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); |
| 41 | static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); | 82 | static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); |
| 42 | static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); | 83 | static 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 | ||
| 401 | static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = { | 442 | static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = { |
| 402 | SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT, | 443 | SND_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), |
| 404 | SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1, | 445 | SND_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), |
| 406 | SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK, | 447 | SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK, |
