ASoC: wm2000: Use clock API integration to configure MCLK divisor
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 14 Dec 2012 06:16:58 +0000 (15:16 +0900)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 24 Dec 2012 15:42:35 +0000 (15:42 +0000)
Since we are now using the clock API integration to manage MCLK we can now
use clk_get_rate() to determine if we need to divide MCLK without relying
on platform data.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
include/sound/wm2000.h
sound/soc/codecs/wm2000.c

index aa388ca9ec64739f0c8d717be02c164f331d621b..4de81f41c90ffb40f9ce6a6b61d8b83591398d9f 100644 (file)
@@ -15,9 +15,6 @@ struct wm2000_platform_data {
        /** Filename for system-specific image to download to device. */
        const char *download_file;
 
-       /** Divide MCLK by 2 for system clock? */
-       unsigned int mclkdiv2:1;
-
        /** Disable speech clarity enhancement, for use when an
         * external algorithm is used. */
        unsigned int speech_enh_disable:1;
index 0aba8ce424caf880fd28391cc4854df86e1b28b6..85550dc319db8429421a5078dcf51826d75f28cb 100644 (file)
@@ -73,7 +73,6 @@ struct wm2000_priv {
        unsigned int anc_eng_ena:1;
        unsigned int spk_ena:1;
 
-       unsigned int mclk_div:1;
        unsigned int speech_clarity:1;
 
        int anc_download_size;
@@ -133,6 +132,7 @@ static int wm2000_poll_bit(struct i2c_client *i2c,
 static int wm2000_power_up(struct i2c_client *i2c, int analogue)
 {
        struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
+       unsigned long rate;
        int ret;
 
        BUG_ON(wm2000->anc_mode != ANC_OFF);
@@ -145,7 +145,8 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
                return ret;
        }
 
-       if (!wm2000->mclk_div) {
+       rate = clk_get_rate(wm2000->mclk);
+       if (rate <= 13500000) {
                dev_dbg(&i2c->dev, "Disabling MCLK divider\n");
                wm2000_write(i2c, WM2000_REG_SYS_CTL2,
                             WM2000_MCLK_DIV2_ENA_CLR);
@@ -847,7 +848,6 @@ static int wm2000_i2c_probe(struct i2c_client *i2c,
        filename = "wm2000_anc.bin";
        pdata = dev_get_platdata(&i2c->dev);
        if (pdata) {
-               wm2000->mclk_div = pdata->mclkdiv2;
                wm2000->speech_clarity = !pdata->speech_enh_disable;
 
                if (pdata->download_file)