mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
ASoC: wm5110: Add post SYSCLK register patch for rev D chip
Certain registers require patching after the SYSCLK has been brought up add support for this into the CODEC driver. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@linaro.org> Cc: stable@vger.kernel.org
This commit is contained in:
parent
9645083ca5
commit
f69f86b1ba
1 changed files with 42 additions and 1 deletions
|
@ -37,6 +37,47 @@ struct wm5110_priv {
|
|||
struct arizona_fll fll[2];
|
||||
};
|
||||
|
||||
static const struct reg_default wm5110_sysclk_revd_patch[] = {
|
||||
{ 0x3093, 0x1001 },
|
||||
{ 0x30E3, 0x1301 },
|
||||
{ 0x3133, 0x1201 },
|
||||
{ 0x3183, 0x1501 },
|
||||
{ 0x31D3, 0x1401 },
|
||||
};
|
||||
|
||||
static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_codec *codec = w->codec;
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
struct regmap *regmap = codec->control_data;
|
||||
const struct reg_default *patch = NULL;
|
||||
int i, patch_size;
|
||||
|
||||
switch (arizona->rev) {
|
||||
case 3:
|
||||
patch = wm5110_sysclk_revd_patch;
|
||||
patch_size = ARRAY_SIZE(wm5110_sysclk_revd_patch);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
if (patch)
|
||||
for (i = 0; i < patch_size; i++)
|
||||
regmap_write(regmap, patch[i].reg,
|
||||
patch[i].def);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
|
||||
static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
|
||||
static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
|
||||
|
@ -400,7 +441,7 @@ static const struct snd_kcontrol_new wm5110_aec_loopback_mux =
|
|||
|
||||
static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,
|
||||
0, NULL, 0),
|
||||
0, wm5110_sysclk_ev, SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,
|
||||
ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),
|
||||
SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,
|
||||
|
|
Loading…
Reference in a new issue