OSDN Git Service

Merge remote-tracking branches 'asoc/topic/suspend', 'asoc/topic/tas2552', 'asoc...
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / sound / soc / codecs / sgtl5000.c
index a604a22..6bb77d7 100644 (file)
@@ -626,6 +626,9 @@ static int sgtl5000_set_clock(struct snd_soc_codec *codec, int frame_rate)
                } else {
                        dev_err(codec->dev,
                                "PLL not supported in slave mode\n");
+                       dev_err(codec->dev, "%d ratio is not supported. "
+                               "SYS_MCLK needs to be 256, 384 or 512 * fs\n",
+                               sgtl5000->sysclk / sys_fs);
                        return -EINVAL;
                }
        }
@@ -1414,6 +1417,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);
@@ -1437,6 +1441,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;