aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/davinci/davinci-mcasp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/davinci/davinci-mcasp.c')
-rw-r--r--sound/soc/davinci/davinci-mcasp.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index 0a302e1080d9..ab6518d86f18 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -767,14 +767,26 @@ static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
767 int ret = 0; 767 int ret = 0;
768 768
769 switch (cmd) { 769 switch (cmd) {
770 case SNDRV_PCM_TRIGGER_START:
771 case SNDRV_PCM_TRIGGER_RESUME: 770 case SNDRV_PCM_TRIGGER_RESUME:
771 case SNDRV_PCM_TRIGGER_START:
772 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 772 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
773 if (!dev->clk_active) {
774 clk_enable(dev->clk);
775 dev->clk_active = 1;
776 }
773 davinci_mcasp_start(dev, substream->stream); 777 davinci_mcasp_start(dev, substream->stream);
774 break; 778 break;
775 779
776 case SNDRV_PCM_TRIGGER_STOP:
777 case SNDRV_PCM_TRIGGER_SUSPEND: 780 case SNDRV_PCM_TRIGGER_SUSPEND:
781 davinci_mcasp_stop(dev, substream->stream);
782 if (dev->clk_active) {
783 clk_disable(dev->clk);
784 dev->clk_active = 0;
785 }
786
787 break;
788
789 case SNDRV_PCM_TRIGGER_STOP:
778 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 790 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
779 davinci_mcasp_stop(dev, substream->stream); 791 davinci_mcasp_stop(dev, substream->stream);
780 break; 792 break;
@@ -866,6 +878,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
866 } 878 }
867 879
868 clk_enable(dev->clk); 880 clk_enable(dev->clk);
881 dev->clk_active = 1;
869 882
870 dev->base = (void __iomem *)IO_ADDRESS(mem->start); 883 dev->base = (void __iomem *)IO_ADDRESS(mem->start);
871 dev->op_mode = pdata->op_mode; 884 dev->op_mode = pdata->op_mode;