]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ENGR00273838-8 ASoC: WM8962: Let codec driver enable/disable its MCLK
authorNicolin Chen <b42378@freescale.com>
Mon, 5 Aug 2013 08:26:16 +0000 (16:26 +0800)
committerNitin Garg <nitin.garg@freescale.com>
Fri, 16 Jan 2015 03:17:48 +0000 (21:17 -0600)
WM8962 needs its MCLK when powerup -- wm8962_resume(). Thus it's better
to control the MCLK in codec driver. Thus remove the clock enable in
machine dirver accordingly.

Acked-by: Wang Shengjiu <b02247@freescale.com>
Signed-off-by: Nicolin Chen <b42378@freescale.com>
(cherry picked from commit 007d3504914096760124f2ef13d52da206341a66)

sound/soc/fsl/imx-wm8962.c

index 4a409422ce4a8af956a40784d872b4416afdab00..b5345ae923c024276a62de9a811f7fb828cf07c2 100644 (file)
@@ -33,7 +33,6 @@ struct imx_wm8962_data {
        struct snd_soc_card card;
        char codec_dai_name[DAI_NAME_SIZE];
        char platform_name[DAI_NAME_SIZE];
-       struct clk *codec_clk;
        unsigned int clk_frequency;
 };
 
@@ -187,6 +186,7 @@ static int imx_wm8962_probe(struct platform_device *pdev)
        struct imx_priv *priv = &card_priv;
        struct i2c_client *codec_dev;
        struct imx_wm8962_data *data;
+       struct clk *codec_clk = NULL;
        int int_port, ext_port;
        int ret;
 
@@ -258,19 +258,14 @@ static int imx_wm8962_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       data->codec_clk = devm_clk_get(&codec_dev->dev, NULL);
-       if (IS_ERR(data->codec_clk)) {
-               ret = PTR_ERR(data->codec_clk);
+       codec_clk = devm_clk_get(&codec_dev->dev, NULL);
+       if (IS_ERR(codec_clk)) {
+               ret = PTR_ERR(codec_clk);
                dev_err(&codec_dev->dev, "failed to get codec clk: %d\n", ret);
                goto fail;
        }
 
-       data->clk_frequency = clk_get_rate(data->codec_clk);
-       ret = clk_prepare_enable(data->codec_clk);
-       if (ret) {
-               dev_err(&codec_dev->dev, "failed to enable codec clk: %d\n", ret);
-               goto fail;
-       }
+       data->clk_frequency = clk_get_rate(codec_clk);
 
        data->dai.name = "HiFi";
        data->dai.stream_name = "HiFi";
@@ -285,10 +280,10 @@ static int imx_wm8962_probe(struct platform_device *pdev)
        data->card.dev = &pdev->dev;
        ret = snd_soc_of_parse_card_name(&data->card, "model");
        if (ret)
-               goto clk_fail;
+               goto fail;
        ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
        if (ret)
-               goto clk_fail;
+               goto fail;
        data->card.num_links = 1;
        data->card.dai_link = &data->dai;
        data->card.dapm_widgets = imx_wm8962_dapm_widgets;
@@ -302,16 +297,9 @@ static int imx_wm8962_probe(struct platform_device *pdev)
        ret = devm_snd_soc_register_card(&pdev->dev, &data->card);
        if (ret) {
                dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
-               goto clk_fail;
+               goto fail;
        }
 
-       of_node_put(ssi_np);
-       of_node_put(codec_np);
-
-       return 0;
-
-clk_fail:
-       clk_disable_unprepare(data->codec_clk);
 fail:
        if (ssi_np)
                of_node_put(ssi_np);
@@ -323,12 +311,6 @@ fail:
 
 static int imx_wm8962_remove(struct platform_device *pdev)
 {
-       struct snd_soc_card *card = platform_get_drvdata(pdev);
-       struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card);
-
-       if (!IS_ERR(data->codec_clk))
-               clk_disable_unprepare(data->codec_clk);
-
        return 0;
 }