Esempio n. 1
0
static int msm8x10_enable_codec_ext_clk(struct snd_soc_codec *codec,
					int enable, bool dapm)
{
	int ret = 0;

	mutex_lock(&cdc_mclk_mutex);

	pr_debug("%s: enable = %d  codec name %s enable %d mclk ref counter %d\n",
		   __func__, enable, codec->name, enable,
		   atomic_read(&mclk_rsc_ref));
	if (enable) {
		if (atomic_inc_return(&mclk_rsc_ref) == 1) {
			digital_cdc_clk.clk_val = 9600000;
			msm_config_mclk(AFE_PORT_ID_SECONDARY_MI2S_RX,
					&digital_cdc_clk);
			msm8x10_wcd_mclk_enable(codec, 1, dapm);
		}
	} else {
		if (atomic_dec_return(&mclk_rsc_ref) == 0) {
			digital_cdc_clk.clk_val = 0;
			msm8x10_wcd_mclk_enable(codec, 0, dapm);
			msm_config_mclk(AFE_PORT_ID_SECONDARY_MI2S_RX,
					&digital_cdc_clk);
		}
	}
	mutex_unlock(&cdc_mclk_mutex);
	return ret;
}
Esempio n. 2
0
static int msm8x10_enable_codec_ext_clk(struct snd_soc_codec *codec,
					int enable, bool dapm)
{
	int ret = 0;

	pr_debug("%s: enable = %d  codec name %s enable %x\n",
		   __func__, enable, codec->name, enable);
	if (enable) {
		digital_cdc_clk.clk_val = 9600000;
		msm_config_mi2s_clk(1);
		ret = msm_config_mclk(AFE_PORT_ID_SECONDARY_MI2S_RX,
					   &digital_cdc_clk);
		msm8x10_wcd_mclk_enable(codec, 1, dapm);
	} else {
		msm8x10_wcd_mclk_enable(codec, 0, dapm);
		ret = msm_config_mclk(AFE_PORT_ID_SECONDARY_MI2S_RX,
					   &digital_cdc_clk);
		msm_config_mi2s_clk(0);
	}
	return ret;
}