aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/samsung/pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/samsung/pcm.c')
-rw-r--r--sound/soc/samsung/pcm.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c
index af4b521..f4f6adf 100644
--- a/sound/soc/samsung/pcm.c
+++ b/sound/soc/samsung/pcm.c
@@ -547,6 +547,8 @@ EXPORT_SYMBOL_GPL(s3c_pcm_dai);
static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
{
+ struct clk *mout_epll = NULL;
+ struct clk *sclk_audio = NULL;
struct s3c_pcm_info *pcm;
struct resource *mem_res, *dmatx_res, *dmarx_res;
struct s3c_audio_pdata *pcm_pdata;
@@ -592,6 +594,37 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
/* Default is 128fs */
pcm->sclk_per_fs = 128;
+ /* Clock configuration */
+ mout_epll = clk_get(&pdev->dev, "mout_epll");
+ if (IS_ERR(mout_epll)) {
+ dev_err(&pdev->dev, "failed to get mout_epll\n");
+ ret = PTR_ERR(mout_epll);
+ return ret;
+ }
+
+ switch (pdev->id) {
+ case 0:
+ sclk_audio = clk_get(&pdev->dev, "audio-bus");
+ break;
+ case 1:
+ sclk_audio = clk_get(&pdev->dev, "audio-bus1");
+ break;
+ case 2:
+ sclk_audio = clk_get(&pdev->dev, "audio-bus2");
+ break;
+ default:
+ dev_err(&pdev->dev, "Not support device num\n");
+ break;
+ }
+
+ if (IS_ERR(sclk_audio)) {
+ dev_err(&pdev->dev, "failed to get sclk_audio\n");
+ ret = PTR_ERR(sclk_audio);
+ goto err;
+ }
+
+ clk_set_parent(sclk_audio, mout_epll);
+
pcm->cclk = clk_get(&pdev->dev, "audio-bus");
if (IS_ERR(pcm->cclk)) {
dev_err(&pdev->dev, "failed to get audio-bus\n");
@@ -642,6 +675,9 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id];
pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id];
+ clk_put(mout_epll);
+ clk_put(sclk_audio);
+
return 0;
err5:
@@ -655,6 +691,9 @@ err2:
clk_disable(pcm->cclk);
clk_put(pcm->cclk);
err1:
+ clk_put(sclk_audio);
+err:
+ clk_put(mout_epll);
return ret;
}