ASoC: sgtl5000: Do a sanity check on SYS_MCLK
authorFabio Estevam <fabio.estevam@freescale.com>
Thu, 2 Oct 2014 20:36:05 +0000 (17:36 -0300)
committerMark Brown <broonie@kernel.org>
Fri, 3 Oct 2014 10:20:38 +0000 (11:20 +0100)
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>
sound/soc/codecs/sgtl5000.c

index 7ef2687b396f3efa1f002eb5fb4f02cfca7a2c21..3e9db43ed7604c01a8b1d6f2a84dec83a113e070 100644 (file)
@@ -1445,6 +1445,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
 {
        struct sgtl5000_priv *sgtl5000;
        int ret, reg, rev;
+       unsigned int mclk;
 
        sgtl5000 = devm_kzalloc(&client->dev, sizeof(struct sgtl5000_priv),
                                                                GFP_KERNEL);
@@ -1468,6 +1469,14 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
                return ret;
        }
 
+       /* SGTL5000 SYS_MCLK should be between 8 and 27 MHz */
+       mclk = clk_get_rate(sgtl5000->mclk);
+       if (mclk < 8000000 || mclk > 27000000) {
+               dev_err(&client->dev, "Invalid SYS_CLK frequency: %u.%03uMHz\n",
+                       mclk / 1000000, mclk / 1000 % 1000);
+               return -EINVAL;
+       }
+
        ret = clk_prepare_enable(sgtl5000->mclk);
        if (ret)
                return ret;