X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=sound%2Fsoc%2Fomap%2Fomap3pandora.c;h=796484d6e4f4cb7e5a7101f27e07e6e2aed7ac60;hp=30a75b406aea653dd2666deaad373de2d5204d79;hb=6b647d6ae1e9f1c6448d455f7a42d0857365d500;hpb=1a67a573b8d9f02211f36fbab50f6265dc49384a diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c index 30a75b406aea..796484d6e4f4 100644 --- a/sound/soc/omap/omap3pandora.c +++ b/sound/soc/omap/omap3pandora.c @@ -24,10 +24,12 @@ #include #include #include +#include #include #include #include +#include #include #include @@ -48,6 +50,7 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream, struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + int divider; int ret; /* Set the codec system clock for DAC and ADC */ @@ -67,9 +70,30 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream, return ret; } - ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, 8); + divider = 8; + if (snd_pcm_format_physical_width(params_format(params)) > 16) + divider = 4; + + ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, divider); + if (ret < 0) { + pr_err(PREFIX "can't set SRG clock divider to %d\n", divider); + return ret; + } + + return 0; +} + +static int omap3pandora_hw_free(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + int ret; + + /* Set McBSP clock back to internal for power saving to work */ + ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_FCLK, + 0, SND_SOC_CLOCK_IN); if (ret < 0) { - pr_err(PREFIX "can't set SRG clock divider\n"); + pr_err(PREFIX "can't set cpu system clock\n"); return ret; } @@ -200,6 +224,7 @@ static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd) static struct snd_soc_ops omap3pandora_ops = { .hw_params = omap3pandora_hw_params, + .hw_free = omap3pandora_hw_free, }; /* Digital audio interface glue - connects codec <--> CPU */