diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2014-10-02 16:36:05 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2014-10-03 06:20:38 -0400 |
commit | 6f4d2b3177ee3352e70c90f327e2dea3809c263e (patch) | |
tree | 4d4fe0f5128dc650730a36258b52230956b4bca3 /sound/soc/codecs | |
parent | fa558d0130debf847b6b8cd95880a2d7556770ac (diff) |
ASoC: sgtl5000: Do a sanity check on SYS_MCLK
According to the sgtl5000 datasheet the valid range for SYS_MCLK is from 8 to
27 MHz.
Add a sanity check prior to enabling SYS_MCLK.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs')
-rw-r--r-- | sound/soc/codecs/sgtl5000.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index 7ef2687b396f..3e9db43ed760 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c | |||
@@ -1445,6 +1445,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, | |||
1445 | { | 1445 | { |
1446 | struct sgtl5000_priv *sgtl5000; | 1446 | struct sgtl5000_priv *sgtl5000; |
1447 | int ret, reg, rev; | 1447 | int ret, reg, rev; |
1448 | unsigned int mclk; | ||
1448 | 1449 | ||
1449 | sgtl5000 = devm_kzalloc(&client->dev, sizeof(struct sgtl5000_priv), | 1450 | sgtl5000 = devm_kzalloc(&client->dev, sizeof(struct sgtl5000_priv), |
1450 | GFP_KERNEL); | 1451 | GFP_KERNEL); |
@@ -1468,6 +1469,14 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, | |||
1468 | return ret; | 1469 | return ret; |
1469 | } | 1470 | } |
1470 | 1471 | ||
1472 | /* SGTL5000 SYS_MCLK should be between 8 and 27 MHz */ | ||
1473 | mclk = clk_get_rate(sgtl5000->mclk); | ||
1474 | if (mclk < 8000000 || mclk > 27000000) { | ||
1475 | dev_err(&client->dev, "Invalid SYS_CLK frequency: %u.%03uMHz\n", | ||
1476 | mclk / 1000000, mclk / 1000 % 1000); | ||
1477 | return -EINVAL; | ||
1478 | } | ||
1479 | |||
1471 | ret = clk_prepare_enable(sgtl5000->mclk); | 1480 | ret = clk_prepare_enable(sgtl5000->mclk); |
1472 | if (ret) | 1481 | if (ret) |
1473 | return ret; | 1482 | return ret; |