diff options
author | Adam Thomson <Adam.Thomson.Opensource@diasemi.com> | 2016-04-19 10:19:02 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-04-19 12:39:52 -0400 |
commit | 63a450aa4d08ccf4f53e9fa59144e746e2288319 (patch) | |
tree | 9620ad23d07d54586e12a031bd99984457725994 | |
parent | f55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff) |
ASoC: da7219: Update PLL ranges and dividers to improve locking
The expected MCLK frequency ranges and the associated dividers
are updated to improve PLL locking in a corner scenario, with low
MCLK frequency near an input divider change boundary.
Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/da7219.c | 28 | ||||
-rw-r--r-- | sound/soc/codecs/da7219.h | 20 |
2 files changed, 24 insertions, 24 deletions
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c index 81c0708b85c1..3b1d65badbda 100644 --- a/sound/soc/codecs/da7219.c +++ b/sound/soc/codecs/da7219.c | |||
@@ -1079,21 +1079,21 @@ static int da7219_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, | |||
1079 | dev_err(codec->dev, "PLL input clock %d below valid range\n", | 1079 | dev_err(codec->dev, "PLL input clock %d below valid range\n", |
1080 | da7219->mclk_rate); | 1080 | da7219->mclk_rate); |
1081 | return -EINVAL; | 1081 | return -EINVAL; |
1082 | } else if (da7219->mclk_rate <= 5000000) { | 1082 | } else if (da7219->mclk_rate <= 4500000) { |
1083 | indiv_bits = DA7219_PLL_INDIV_2_5_MHZ; | 1083 | indiv_bits = DA7219_PLL_INDIV_2_TO_4_5_MHZ; |
1084 | indiv = DA7219_PLL_INDIV_2_5_MHZ_VAL; | 1084 | indiv = DA7219_PLL_INDIV_2_TO_4_5_MHZ_VAL; |
1085 | } else if (da7219->mclk_rate <= 10000000) { | 1085 | } else if (da7219->mclk_rate <= 9000000) { |
1086 | indiv_bits = DA7219_PLL_INDIV_5_10_MHZ; | 1086 | indiv_bits = DA7219_PLL_INDIV_4_5_TO_9_MHZ; |
1087 | indiv = DA7219_PLL_INDIV_5_10_MHZ_VAL; | 1087 | indiv = DA7219_PLL_INDIV_4_5_TO_9_MHZ_VAL; |
1088 | } else if (da7219->mclk_rate <= 20000000) { | 1088 | } else if (da7219->mclk_rate <= 18000000) { |
1089 | indiv_bits = DA7219_PLL_INDIV_10_20_MHZ; | 1089 | indiv_bits = DA7219_PLL_INDIV_9_TO_18_MHZ; |
1090 | indiv = DA7219_PLL_INDIV_10_20_MHZ_VAL; | 1090 | indiv = DA7219_PLL_INDIV_9_TO_18_MHZ_VAL; |
1091 | } else if (da7219->mclk_rate <= 40000000) { | 1091 | } else if (da7219->mclk_rate <= 36000000) { |
1092 | indiv_bits = DA7219_PLL_INDIV_20_40_MHZ; | 1092 | indiv_bits = DA7219_PLL_INDIV_18_TO_36_MHZ; |
1093 | indiv = DA7219_PLL_INDIV_20_40_MHZ_VAL; | 1093 | indiv = DA7219_PLL_INDIV_18_TO_36_MHZ_VAL; |
1094 | } else if (da7219->mclk_rate <= 54000000) { | 1094 | } else if (da7219->mclk_rate <= 54000000) { |
1095 | indiv_bits = DA7219_PLL_INDIV_40_54_MHZ; | 1095 | indiv_bits = DA7219_PLL_INDIV_36_TO_54_MHZ; |
1096 | indiv = DA7219_PLL_INDIV_40_54_MHZ_VAL; | 1096 | indiv = DA7219_PLL_INDIV_36_TO_54_MHZ_VAL; |
1097 | } else { | 1097 | } else { |
1098 | dev_err(codec->dev, "PLL input clock %d above valid range\n", | 1098 | dev_err(codec->dev, "PLL input clock %d above valid range\n", |
1099 | da7219->mclk_rate); | 1099 | da7219->mclk_rate); |
diff --git a/sound/soc/codecs/da7219.h b/sound/soc/codecs/da7219.h index 5a787e738084..ff2a2f02ce40 100644 --- a/sound/soc/codecs/da7219.h +++ b/sound/soc/codecs/da7219.h | |||
@@ -194,11 +194,11 @@ | |||
194 | /* DA7219_PLL_CTRL = 0x20 */ | 194 | /* DA7219_PLL_CTRL = 0x20 */ |
195 | #define DA7219_PLL_INDIV_SHIFT 2 | 195 | #define DA7219_PLL_INDIV_SHIFT 2 |
196 | #define DA7219_PLL_INDIV_MASK (0x7 << 2) | 196 | #define DA7219_PLL_INDIV_MASK (0x7 << 2) |
197 | #define DA7219_PLL_INDIV_2_5_MHZ (0x0 << 2) | 197 | #define DA7219_PLL_INDIV_2_TO_4_5_MHZ (0x0 << 2) |
198 | #define DA7219_PLL_INDIV_5_10_MHZ (0x1 << 2) | 198 | #define DA7219_PLL_INDIV_4_5_TO_9_MHZ (0x1 << 2) |
199 | #define DA7219_PLL_INDIV_10_20_MHZ (0x2 << 2) | 199 | #define DA7219_PLL_INDIV_9_TO_18_MHZ (0x2 << 2) |
200 | #define DA7219_PLL_INDIV_20_40_MHZ (0x3 << 2) | 200 | #define DA7219_PLL_INDIV_18_TO_36_MHZ (0x3 << 2) |
201 | #define DA7219_PLL_INDIV_40_54_MHZ (0x4 << 2) | 201 | #define DA7219_PLL_INDIV_36_TO_54_MHZ (0x4 << 2) |
202 | #define DA7219_PLL_MCLK_SQR_EN_SHIFT 5 | 202 | #define DA7219_PLL_MCLK_SQR_EN_SHIFT 5 |
203 | #define DA7219_PLL_MCLK_SQR_EN_MASK (0x1 << 5) | 203 | #define DA7219_PLL_MCLK_SQR_EN_MASK (0x1 << 5) |
204 | #define DA7219_PLL_MODE_SHIFT 6 | 204 | #define DA7219_PLL_MODE_SHIFT 6 |
@@ -761,11 +761,11 @@ | |||
761 | #define DA7219_PLL_FREQ_OUT_98304 98304000 | 761 | #define DA7219_PLL_FREQ_OUT_98304 98304000 |
762 | 762 | ||
763 | /* PLL Frequency Dividers */ | 763 | /* PLL Frequency Dividers */ |
764 | #define DA7219_PLL_INDIV_2_5_MHZ_VAL 1 | 764 | #define DA7219_PLL_INDIV_2_TO_4_5_MHZ_VAL 1 |
765 | #define DA7219_PLL_INDIV_5_10_MHZ_VAL 2 | 765 | #define DA7219_PLL_INDIV_4_5_TO_9_MHZ_VAL 2 |
766 | #define DA7219_PLL_INDIV_10_20_MHZ_VAL 4 | 766 | #define DA7219_PLL_INDIV_9_TO_18_MHZ_VAL 4 |
767 | #define DA7219_PLL_INDIV_20_40_MHZ_VAL 8 | 767 | #define DA7219_PLL_INDIV_18_TO_36_MHZ_VAL 8 |
768 | #define DA7219_PLL_INDIV_40_54_MHZ_VAL 16 | 768 | #define DA7219_PLL_INDIV_36_TO_54_MHZ_VAL 16 |
769 | 769 | ||
770 | /* SRM */ | 770 | /* SRM */ |
771 | #define DA7219_SRM_CHECK_RETRIES 8 | 771 | #define DA7219_SRM_CHECK_RETRIES 8 |