2014-03-04 12:58 GMT+08:00 Mark Brown broonie@kernel.org:
On Mon, Mar 03, 2014 at 03:48:02PM +0800, Barry Song wrote:
here the clock is an internal clock in the internal codec. the external clock of audio controller is managed in system suspend/resume as you see. but they are not managed in runtime suspend/resume here because the external clock is always enabled to make sure the charge pump to be working to make the board have stable current and voltage. otherwise, touchscreen ADC will not be accurate.
Why aren't these drivers keeping the clock enabled themselves?
The charge pump register is a part of the audio controller. But this register is impacted the touchscreen ADC stable. So when the audio codec driver probe, It always enable the audio controller's clock, and must be set the charge pump register.
ret = clk_prepare_enable(sirf_audio_codec->clk); if (ret) { dev_err(&pdev->dev, "Enable clock failed.\n"); return ret; } ..... /* * Always open charge pump, if not, when the charge pump closed the * adc will not stable */ regmap_update_bits(sirf_audio_codec->regmap, AUDIO_IC_CODEC_CTRL0, IC_CPFREQ, IC_CPFREQ);
if (of_device_is_compatible(pdev->dev.of_node, "sirf,atlas6-audio-codec")) regmap_update_bits(sirf_audio_codec->regmap, AUDIO_IC_CODEC_CTRL0, IC_CPEN, IC_CPEN);
Thanks RongJun Ying