diff options
Diffstat (limited to 'sound/soc/samsung/pcm.c')
-rw-r--r-- | sound/soc/samsung/pcm.c | 39 |
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; } |