aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Thomson <Adam.Thomson.Opensource@diasemi.com>2016-04-19 10:19:02 -0400
committerMark Brown <broonie@kernel.org>2016-04-19 12:39:52 -0400
commit63a450aa4d08ccf4f53e9fa59144e746e2288319 (patch)
tree9620ad23d07d54586e12a031bd99984457725994
parentf55532a0c0b8bb6148f4e07853b876ef73bc69ca (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.c28
-rw-r--r--sound/soc/codecs/da7219.h20
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