mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08: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
@ -37,6 +37,47 @@ struct wm5110_priv {
|
|||||||
struct arizona_fll fll[2];
|
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(ana_tlv, 0, 100, 0);
|
||||||
static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
|
static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
|
||||||
static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 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[] = {
|
static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = {
|
||||||
SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,
|
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,
|
SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,
|
||||||
ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),
|
ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,
|
SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,
|
||||||
|
Loading…
Reference in New Issue
Block a user