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=7605c37c91e79f085c81d952d0fc9d09f91fdf0d;hb=6b647d6ae1e9f1c6448d455f7a42d0857365d500;hpb=cdaeb578aca9e017deb0f55f1af8a94a4d63efb3 diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c index 7605c37c91e7..796484d6e4f4 100644 --- a/sound/soc/omap/omap3pandora.c +++ b/sound/soc/omap/omap3pandora.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -49,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 */ @@ -68,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; } @@ -201,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 */