Merge "ASoC: wcd9335: add support for rock bottom sleep current"

This commit is contained in:
Linux Build Service Account 2015-10-20 04:37:36 -07:00 committed by Gerrit - the friendly Code Review server
commit 8a43954209

View file

@ -680,6 +680,7 @@ struct tasha_priv {
struct wcd_cpe_core *cpe_core;
u32 current_cpe_clk_freq;
enum tasha_sido_voltage sido_voltage;
int sido_ccl_cnt;
u32 ana_rx_supplies;
/* Multiplication factor used for impedance detection */
@ -803,6 +804,36 @@ static void tasha_enable_sido_buck(struct snd_soc_codec *codec)
tasha->resmgr->sido_input_src = SIDO_SOURCE_RCO_BG;
}
static void tasha_cdc_sido_ccl_enable(struct tasha_priv *tasha, bool ccl_flag)
{
struct snd_soc_codec *codec = tasha->codec;
if (!codec)
return;
if (!TASHA_IS_2_0(tasha->wcd9xxx->version)) {
dev_dbg(codec->dev, "%s: tasha version < 2p0, return\n",
__func__);
return;
}
dev_dbg(codec->dev, "%s: sido_ccl_cnt=%d, ccl_flag:%d\n",
__func__, tasha->sido_ccl_cnt, ccl_flag);
if (ccl_flag) {
if (++tasha->sido_ccl_cnt == 1)
snd_soc_update_bits(codec,
WCD9335_SIDO_SIDO_CCL_10, 0xFF, 0x6E);
} else {
if (tasha->sido_ccl_cnt == 0) {
dev_dbg(codec->dev, "%s: sido_ccl already disabled\n",
__func__);
return;
}
if (--tasha->sido_ccl_cnt == 0)
snd_soc_update_bits(codec,
WCD9335_SIDO_SIDO_CCL_10, 0xFF, 0x02);
}
}
static bool tasha_cdc_is_svs_enabled(struct tasha_priv *tasha)
{
if (svs_scaling_enabled && (codec_ver == WCD9335) &&
@ -818,6 +849,7 @@ static int tasha_cdc_req_mclk_enable(struct tasha_priv *tasha,
int ret = 0;
if (enable) {
tasha_cdc_sido_ccl_enable(tasha, true);
ret = clk_prepare_enable(tasha->wcd_ext_clk);
if (ret) {
dev_err(tasha->dev, "%s: ext clk enable failed\n",
@ -834,6 +866,7 @@ static int tasha_cdc_req_mclk_enable(struct tasha_priv *tasha,
/* put BG */
wcd_resmgr_disable_master_bias(tasha->resmgr);
clk_disable_unprepare(tasha->wcd_ext_clk);
tasha_cdc_sido_ccl_enable(tasha, false);
}
err:
return ret;
@ -10075,6 +10108,7 @@ static int tasha_codec_internal_rco_ctrl(struct snd_soc_codec *codec,
WCD9XXX_V2_BG_CLK_LOCK(tasha->resmgr);
if (enable) {
tasha_cdc_sido_ccl_enable(tasha, true);
if (wcd_resmgr_get_clk_type(tasha->resmgr) ==
WCD_CLK_RCO) {
ret = wcd_resmgr_enable_clk_block(tasha->resmgr,
@ -10089,6 +10123,7 @@ static int tasha_codec_internal_rco_ctrl(struct snd_soc_codec *codec,
} else {
ret = wcd_resmgr_disable_clk_block(tasha->resmgr,
WCD_CLK_RCO);
tasha_cdc_sido_ccl_enable(tasha, false);
}
if (ret) {
@ -11793,6 +11828,7 @@ static int tasha_probe(struct platform_device *pdev)
tasha->wcd_ext_clk = wcd_ext_clk;
tasha->sido_voltage = SIDO_VOLTAGE_NOMINAL_MV;
set_bit(AUDIO_NOMINAL, &tasha->status_mask);
tasha->sido_ccl_cnt = 0;
/* Update codec register default values */
tasha_update_reg_defaults(tasha);