Commit 1ca2e847 authored by Lucas Stach's avatar Lucas Stach Committed by Mark Brown

ASoC: tegra: move AC97 clock handling to the machine driver

On Tegra the convention is to have a single machine driver
that's controlling the whole audio subsystem.

Move the clock handling to the machine driver, to be in line
with the other Tegra drivers and give the machine driver
full control over the single Tegra audio PLL.
Signed-off-by: default avatarLucas Stach <dev@lynxeye.de>
Acked-by: default avatarStephen Warren <swarren@nvidia.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 38dbfb59
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <sound/soc.h> #include <sound/soc.h>
#include <sound/dmaengine_pcm.h> #include <sound/dmaengine_pcm.h>
#include "tegra_asoc_utils.h"
#include "tegra20_ac97.h" #include "tegra20_ac97.h"
#define DRV_NAME "tegra20-ac97" #define DRV_NAME "tegra20-ac97"
...@@ -376,18 +375,10 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev) ...@@ -376,18 +375,10 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev)
ac97->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; ac97->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
ac97->playback_dma_data.maxburst = 4; ac97->playback_dma_data.maxburst = 4;
ret = tegra_asoc_utils_init(&ac97->util_data, &pdev->dev);
if (ret)
goto err_clk_put;
ret = tegra_asoc_utils_set_ac97_rate(&ac97->util_data);
if (ret)
goto err_asoc_utils_fini;
ret = clk_prepare_enable(ac97->clk_ac97); ret = clk_prepare_enable(ac97->clk_ac97);
if (ret) { if (ret) {
dev_err(&pdev->dev, "clk_enable failed: %d\n", ret); dev_err(&pdev->dev, "clk_enable failed: %d\n", ret);
goto err_asoc_utils_fini; goto err;
} }
ret = snd_soc_set_ac97_ops(&tegra20_ac97_ops); ret = snd_soc_set_ac97_ops(&tegra20_ac97_ops);
...@@ -419,8 +410,6 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev) ...@@ -419,8 +410,6 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev)
snd_soc_unregister_component(&pdev->dev); snd_soc_unregister_component(&pdev->dev);
err_clk_disable_unprepare: err_clk_disable_unprepare:
clk_disable_unprepare(ac97->clk_ac97); clk_disable_unprepare(ac97->clk_ac97);
err_asoc_utils_fini:
tegra_asoc_utils_fini(&ac97->util_data);
err_clk_put: err_clk_put:
err: err:
snd_soc_set_ac97_ops(NULL); snd_soc_set_ac97_ops(NULL);
...@@ -434,8 +423,6 @@ static int tegra20_ac97_platform_remove(struct platform_device *pdev) ...@@ -434,8 +423,6 @@ static int tegra20_ac97_platform_remove(struct platform_device *pdev)
tegra_pcm_platform_unregister(&pdev->dev); tegra_pcm_platform_unregister(&pdev->dev);
snd_soc_unregister_component(&pdev->dev); snd_soc_unregister_component(&pdev->dev);
tegra_asoc_utils_fini(&ac97->util_data);
clk_disable_unprepare(ac97->clk_ac97); clk_disable_unprepare(ac97->clk_ac97);
snd_soc_set_ac97_ops(NULL); snd_soc_set_ac97_ops(NULL);
......
...@@ -90,6 +90,5 @@ struct tegra20_ac97 { ...@@ -90,6 +90,5 @@ struct tegra20_ac97 {
struct regmap *regmap; struct regmap *regmap;
int reset_gpio; int reset_gpio;
int sync_gpio; int sync_gpio;
struct tegra_asoc_utils_data util_data;
}; };
#endif /* __TEGRA20_AC97_H__ */ #endif /* __TEGRA20_AC97_H__ */
...@@ -29,10 +29,13 @@ ...@@ -29,10 +29,13 @@
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
#include <sound/soc.h> #include <sound/soc.h>
#include "tegra_asoc_utils.h"
#define DRV_NAME "tegra-snd-wm9712" #define DRV_NAME "tegra-snd-wm9712"
struct tegra_wm9712 { struct tegra_wm9712 {
struct platform_device *codec; struct platform_device *codec;
struct tegra_asoc_utils_data util_data;
}; };
static const struct snd_soc_dapm_widget tegra_wm9712_dapm_widgets[] = { static const struct snd_soc_dapm_widget tegra_wm9712_dapm_widgets[] = {
...@@ -118,15 +121,25 @@ static int tegra_wm9712_driver_probe(struct platform_device *pdev) ...@@ -118,15 +121,25 @@ static int tegra_wm9712_driver_probe(struct platform_device *pdev)
tegra_wm9712_dai.platform_of_node = tegra_wm9712_dai.cpu_of_node; tegra_wm9712_dai.platform_of_node = tegra_wm9712_dai.cpu_of_node;
ret = tegra_asoc_utils_init(&machine->util_data, &pdev->dev);
if (ret)
goto codec_unregister;
ret = tegra_asoc_utils_set_ac97_rate(&machine->util_data);
if (ret)
goto asoc_utils_fini;
ret = snd_soc_register_card(card); ret = snd_soc_register_card(card);
if (ret) { if (ret) {
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
ret); ret);
goto codec_unregister; goto asoc_utils_fini;
} }
return 0; return 0;
asoc_utils_fini:
tegra_asoc_utils_fini(&machine->util_data);
codec_unregister: codec_unregister:
platform_device_del(machine->codec); platform_device_del(machine->codec);
codec_put: codec_put:
...@@ -141,6 +154,8 @@ static int tegra_wm9712_driver_remove(struct platform_device *pdev) ...@@ -141,6 +154,8 @@ static int tegra_wm9712_driver_remove(struct platform_device *pdev)
snd_soc_unregister_card(card); snd_soc_unregister_card(card);
tegra_asoc_utils_fini(&machine->util_data);
platform_device_unregister(machine->codec); platform_device_unregister(machine->codec);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment