diff --git a/sound/arm/omap/omap-alsa-aic23.c b/sound/arm/omap/omap-alsa-aic23.c index 18b7395a03c3acbdcbf14729d9905856fc84b017..293c2d467c472f303a8700dfb0d5cb73a9b49184 100644 --- a/sound/arm/omap/omap-alsa-aic23.c +++ b/sound/arm/omap/omap-alsa-aic23.c @@ -212,6 +212,8 @@ void aic23_clock_setup(void) */ int aic23_clock_on(void) { + uint curRate; + if (clk_get_usecount(aic23_mclk) > 0) { /* MCLK is already in use */ printk(KERN_WARNING @@ -219,13 +221,14 @@ int aic23_clock_on(void) (uint) clk_get_rate(aic23_mclk), CODEC_CLOCK); } - - if (clk_set_rate(aic23_mclk, CODEC_CLOCK)) { - printk(KERN_ERR - "Cannot set MCLK for AIC23 CODEC\n"); - return -ECANCELED; + curRate = (uint)clk_get_rate(aic23_mclk); + if (curRate != CODEC_CLOCK) { + if (clk_set_rate(aic23_mclk, CODEC_CLOCK)) { + printk(KERN_ERR + "Cannot set MCLK for AIC23 CODEC\n"); + return -ECANCELED; + } } - clk_enable(aic23_mclk); printk(KERN_DEBUG @@ -239,6 +242,7 @@ int aic23_clock_on(void) ~ADC_OFF & ~MIC_OFF & ~LINE_OFF); return 0; } + /* * Do some sanity check, turn clock off and then turn * codec audio off