Loading sound/soc/codecs/wcd9330.c +31 −9 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ enum { ADC4_TXFE, ADC5_TXFE, ADC6_TXFE, HPH_DELAY, }; #define TOMTOM_MAD_SLIMBUS_TX_PORT 12 Loading @@ -59,7 +60,7 @@ enum { #define TOMTOM_BIT_ADJ_SHIFT_PORT1_6 4 #define TOMTOM_BIT_ADJ_SHIFT_PORT7_10 5 #define TOMTOM_HPH_PA_SETTLE_COMP_ON 5000 #define TOMTOM_HPH_PA_SETTLE_COMP_ON 10000 #define TOMTOM_HPH_PA_SETTLE_COMP_OFF 13000 #define TOMTOM_HPH_PA_RAMP_DELAY 30000 Loading Loading @@ -4324,14 +4325,22 @@ static int tomtom_hph_pa_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: set_bit(HPH_DELAY, &tomtom->status_mask); /* Let MBHC module know PA is turning on */ wcd9xxx_resmgr_notifier_call(&tomtom->resmgr, e_pre_on); break; case SND_SOC_DAPM_POST_PMU: if (test_bit(HPH_DELAY, &tomtom->status_mask)) { /* * Make sure to wait 10ms after enabling HPHR_HPHL * in register 0x1AB */ usleep_range(pa_settle_time, pa_settle_time + 1000); pr_debug("%s: sleep %d us after %s PA enable\n", __func__, pa_settle_time, w->name); clear_bit(HPH_DELAY, &tomtom->status_mask); pr_debug("%s: sleep %d us after %s PA enable\n", __func__, pa_settle_time, w->name); } if (!high_perf_mode && !tomtom->uhqa_mode) { wcd9xxx_clsh_fsm(codec, &tomtom->clsh_d, req_clsh_state, Loading @@ -4340,12 +4349,23 @@ static int tomtom_hph_pa_event(struct snd_soc_dapm_widget *w, } break; case SND_SOC_DAPM_PRE_PMD: set_bit(HPH_DELAY, &tomtom->status_mask); break; case SND_SOC_DAPM_POST_PMD: /* Let MBHC module know PA turned off */ wcd9xxx_resmgr_notifier_call(&tomtom->resmgr, e_post_off); if (test_bit(HPH_DELAY, &tomtom->status_mask)) { /* * Make sure to wait 10ms after disabling HPHR_HPHL * in register 0x1AB */ usleep_range(pa_settle_time, pa_settle_time + 1000); pr_debug("%s: sleep %d us after %s PA disable\n", __func__, pa_settle_time, w->name); clear_bit(HPH_DELAY, &tomtom->status_mask); pr_debug("%s: sleep %d us after %s PA disable\n", __func__, pa_settle_time, w->name); } break; } Loading Loading @@ -6502,7 +6522,8 @@ static const struct snd_soc_dapm_widget tomtom_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HEADPHONE"), SND_SOC_DAPM_PGA_E("HPHL", TOMTOM_A_RX_HPH_CNP_EN, 5, 0, NULL, 0, tomtom_hph_pa_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MIXER_E("HPHL DAC", TOMTOM_A_RX_HPH_L_DAC_CTL, 7, 0, hphl_switch, ARRAY_SIZE(hphl_switch), tomtom_hphl_dac_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | Loading @@ -6510,7 +6531,8 @@ static const struct snd_soc_dapm_widget tomtom_dapm_widgets[] = { SND_SOC_DAPM_PGA_E("HPHR", TOMTOM_A_RX_HPH_CNP_EN, 4, 0, NULL, 0, tomtom_hph_pa_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("HPHR DAC", NULL, TOMTOM_A_RX_HPH_R_DAC_CTL, 7, 0, tomtom_hphr_dac_event, Loading sound/soc/codecs/wcd9xxx-common.c +7 −14 Original line number Diff line number Diff line Loading @@ -1202,6 +1202,7 @@ static void wcd9xxx_clsh_state_hph_l(struct snd_soc_codec *codec, wcd9xxx_chargepump_request(codec, true); wcd9xxx_enable_anc_delay(codec, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); wcd9xxx_set_buck_mode(codec, BUCK_VREF_0P494V); wcd9xxx_enable_buck(codec, clsh_d, true); wcd9xxx_set_fclk_get_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); Loading @@ -1211,8 +1212,9 @@ static void wcd9xxx_clsh_state_hph_l(struct snd_soc_codec *codec, wcd9xxx_set_fclk_put_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); wcd9xxx_enable_buck(codec, clsh_d, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); wcd9xxx_chargepump_request(codec, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); wcd9xxx_enable_clsh_block(codec, clsh_d, false); wcd9xxx_chargepump_request(codec, false); } } Loading @@ -1228,6 +1230,7 @@ static void wcd9xxx_clsh_state_hph_r(struct snd_soc_codec *codec, wcd9xxx_enable_clsh_block(codec, clsh_d, true); wcd9xxx_chargepump_request(codec, true); wcd9xxx_enable_anc_delay(codec, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); wcd9xxx_set_buck_mode(codec, BUCK_VREF_0P494V); wcd9xxx_enable_buck(codec, clsh_d, true); Loading @@ -1237,9 +1240,10 @@ static void wcd9xxx_clsh_state_hph_r(struct snd_soc_codec *codec, } else { wcd9xxx_set_fclk_put_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); wcd9xxx_enable_buck(codec, clsh_d, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); wcd9xxx_chargepump_request(codec, false); wcd9xxx_enable_clsh_block(codec, clsh_d, false); wcd9xxx_chargepump_request(codec, false); } } Loading @@ -1250,20 +1254,9 @@ static void wcd9xxx_clsh_state_hph_st(struct snd_soc_codec *codec, pr_debug("%s: enter %s\n", __func__, is_enable ? "enable" : "disable"); if (is_enable) { if (req_state == WCD9XXX_CLSH_STATE_HPHL) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); if (req_state == WCD9XXX_CLSH_STATE_HPHR) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); dev_dbg(codec->dev, "%s: stub fallback to hph_st\n", __func__); } else { dev_dbg(codec->dev, "%s: stub fallback to hph_st\n", __func__); if (req_state == WCD9XXX_CLSH_STATE_HPHL) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); if (req_state == WCD9XXX_CLSH_STATE_HPHR) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); } } Loading Loading
sound/soc/codecs/wcd9330.c +31 −9 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ enum { ADC4_TXFE, ADC5_TXFE, ADC6_TXFE, HPH_DELAY, }; #define TOMTOM_MAD_SLIMBUS_TX_PORT 12 Loading @@ -59,7 +60,7 @@ enum { #define TOMTOM_BIT_ADJ_SHIFT_PORT1_6 4 #define TOMTOM_BIT_ADJ_SHIFT_PORT7_10 5 #define TOMTOM_HPH_PA_SETTLE_COMP_ON 5000 #define TOMTOM_HPH_PA_SETTLE_COMP_ON 10000 #define TOMTOM_HPH_PA_SETTLE_COMP_OFF 13000 #define TOMTOM_HPH_PA_RAMP_DELAY 30000 Loading Loading @@ -4324,14 +4325,22 @@ static int tomtom_hph_pa_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: set_bit(HPH_DELAY, &tomtom->status_mask); /* Let MBHC module know PA is turning on */ wcd9xxx_resmgr_notifier_call(&tomtom->resmgr, e_pre_on); break; case SND_SOC_DAPM_POST_PMU: if (test_bit(HPH_DELAY, &tomtom->status_mask)) { /* * Make sure to wait 10ms after enabling HPHR_HPHL * in register 0x1AB */ usleep_range(pa_settle_time, pa_settle_time + 1000); pr_debug("%s: sleep %d us after %s PA enable\n", __func__, pa_settle_time, w->name); clear_bit(HPH_DELAY, &tomtom->status_mask); pr_debug("%s: sleep %d us after %s PA enable\n", __func__, pa_settle_time, w->name); } if (!high_perf_mode && !tomtom->uhqa_mode) { wcd9xxx_clsh_fsm(codec, &tomtom->clsh_d, req_clsh_state, Loading @@ -4340,12 +4349,23 @@ static int tomtom_hph_pa_event(struct snd_soc_dapm_widget *w, } break; case SND_SOC_DAPM_PRE_PMD: set_bit(HPH_DELAY, &tomtom->status_mask); break; case SND_SOC_DAPM_POST_PMD: /* Let MBHC module know PA turned off */ wcd9xxx_resmgr_notifier_call(&tomtom->resmgr, e_post_off); if (test_bit(HPH_DELAY, &tomtom->status_mask)) { /* * Make sure to wait 10ms after disabling HPHR_HPHL * in register 0x1AB */ usleep_range(pa_settle_time, pa_settle_time + 1000); pr_debug("%s: sleep %d us after %s PA disable\n", __func__, pa_settle_time, w->name); clear_bit(HPH_DELAY, &tomtom->status_mask); pr_debug("%s: sleep %d us after %s PA disable\n", __func__, pa_settle_time, w->name); } break; } Loading Loading @@ -6502,7 +6522,8 @@ static const struct snd_soc_dapm_widget tomtom_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HEADPHONE"), SND_SOC_DAPM_PGA_E("HPHL", TOMTOM_A_RX_HPH_CNP_EN, 5, 0, NULL, 0, tomtom_hph_pa_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MIXER_E("HPHL DAC", TOMTOM_A_RX_HPH_L_DAC_CTL, 7, 0, hphl_switch, ARRAY_SIZE(hphl_switch), tomtom_hphl_dac_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | Loading @@ -6510,7 +6531,8 @@ static const struct snd_soc_dapm_widget tomtom_dapm_widgets[] = { SND_SOC_DAPM_PGA_E("HPHR", TOMTOM_A_RX_HPH_CNP_EN, 4, 0, NULL, 0, tomtom_hph_pa_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("HPHR DAC", NULL, TOMTOM_A_RX_HPH_R_DAC_CTL, 7, 0, tomtom_hphr_dac_event, Loading
sound/soc/codecs/wcd9xxx-common.c +7 −14 Original line number Diff line number Diff line Loading @@ -1202,6 +1202,7 @@ static void wcd9xxx_clsh_state_hph_l(struct snd_soc_codec *codec, wcd9xxx_chargepump_request(codec, true); wcd9xxx_enable_anc_delay(codec, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); wcd9xxx_set_buck_mode(codec, BUCK_VREF_0P494V); wcd9xxx_enable_buck(codec, clsh_d, true); wcd9xxx_set_fclk_get_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); Loading @@ -1211,8 +1212,9 @@ static void wcd9xxx_clsh_state_hph_l(struct snd_soc_codec *codec, wcd9xxx_set_fclk_put_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); wcd9xxx_enable_buck(codec, clsh_d, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); wcd9xxx_chargepump_request(codec, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); wcd9xxx_enable_clsh_block(codec, clsh_d, false); wcd9xxx_chargepump_request(codec, false); } } Loading @@ -1228,6 +1230,7 @@ static void wcd9xxx_clsh_state_hph_r(struct snd_soc_codec *codec, wcd9xxx_enable_clsh_block(codec, clsh_d, true); wcd9xxx_chargepump_request(codec, true); wcd9xxx_enable_anc_delay(codec, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); wcd9xxx_set_buck_mode(codec, BUCK_VREF_0P494V); wcd9xxx_enable_buck(codec, clsh_d, true); Loading @@ -1237,9 +1240,10 @@ static void wcd9xxx_clsh_state_hph_r(struct snd_soc_codec *codec, } else { wcd9xxx_set_fclk_put_ncp(codec, clsh_d, NCP_FCLK_LEVEL_8); wcd9xxx_enable_buck(codec, clsh_d, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); wcd9xxx_chargepump_request(codec, false); wcd9xxx_enable_clsh_block(codec, clsh_d, false); wcd9xxx_chargepump_request(codec, false); } } Loading @@ -1250,20 +1254,9 @@ static void wcd9xxx_clsh_state_hph_st(struct snd_soc_codec *codec, pr_debug("%s: enter %s\n", __func__, is_enable ? "enable" : "disable"); if (is_enable) { if (req_state == WCD9XXX_CLSH_STATE_HPHL) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, true); if (req_state == WCD9XXX_CLSH_STATE_HPHR) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, true); dev_dbg(codec->dev, "%s: stub fallback to hph_st\n", __func__); } else { dev_dbg(codec->dev, "%s: stub fallback to hph_st\n", __func__); if (req_state == WCD9XXX_CLSH_STATE_HPHL) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_L, false); if (req_state == WCD9XXX_CLSH_STATE_HPHR) wcd9xxx_clsh_comp_req(codec, clsh_d, CLSH_COMPUTE_HPH_R, false); } } Loading