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]; | ||||
| }; | ||||
| 
 | ||||
| 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 New Issue
	
	Block a user