static int msm8930_enable_codec_ext_clk( struct snd_soc_codec *codec, int enable, bool dapm) { pr_debug("%s: enable = %d\n", __func__, enable); if (enable) { clk_users++; pr_debug("%s: clk_users = %d\n", __func__, clk_users); if (clk_users != 1) return 0; if (codec_clk) { clk_set_rate(codec_clk, SITAR_EXT_CLK_RATE); clk_prepare_enable(codec_clk); sitar_mclk_enable(codec, 1, dapm); } else { pr_err("%s: Error setting Sitar MCLK\n", __func__); clk_users--; return -EINVAL; } } else { pr_debug("%s: clk_users = %d\n", __func__, clk_users); if (clk_users == 0) return 0; clk_users--; if (!clk_users) { pr_debug("%s: disabling MCLK. clk_users = %d\n", __func__, clk_users); sitar_mclk_enable(codec, 0, dapm); clk_disable_unprepare(codec_clk); } } return 0; }
static int msm8930_enable_codec_ext_clk( struct snd_soc_codec *codec, int enable, bool dapm) { int r = 0; pr_debug("%s: enable = %d\n", __func__, enable); mutex_lock(&cdc_mclk_mutex); if (enable) { clk_users++; pr_debug("%s: clk_users = %d\n", __func__, clk_users); if (clk_users == 1) { if (codec_clk) { clk_set_rate(codec_clk, SITAR_EXT_CLK_RATE); clk_prepare_enable(codec_clk); sitar_mclk_enable(codec, 1, dapm); } else { pr_err("%s: Error setting Sitar MCLK\n", __func__); clk_users--; r = -EINVAL; } } } else { if (clk_users > 0) { clk_users--; pr_debug("%s: clk_users = %d\n", __func__, clk_users); if (clk_users == 0) { pr_debug("%s: disabling MCLK. clk_users = %d\n", __func__, clk_users); sitar_mclk_enable(codec, 0, dapm); clk_disable_unprepare(codec_clk); } } else { pr_err("%s: Error releasing Sitar MCLK\n", __func__); r = -EINVAL; } } mutex_unlock(&cdc_mclk_mutex); return r; }