Loading asoc/codecs/wcd938x/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ struct wcd938x_priv { /* Entry for version info */ struct snd_info_entry *entry; struct snd_info_entry *version_entry; int flyback_cur_det_disable; }; struct wcd938x_micbias_setting { Loading asoc/codecs/wcd938x/wcd938x.c +40 −11 Original line number Diff line number Diff line Loading @@ -166,6 +166,12 @@ static int wcd938x_init_reg(struct snd_soc_component *component) 0xC0, 0x80); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_DMIC_CTL, 0x02, 0x02); snd_soc_component_update_bits(component, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP, 0xFF, 0x14); snd_soc_component_update_bits(component, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP, 0x1F, 0x08); return 0; } Loading Loading @@ -364,6 +370,8 @@ static int wcd938x_rx_clk_enable(struct snd_soc_component *component) WCD938X_DIGITAL_CDC_RX2_CTL, 0x40, 0x00); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x02, 0x02); snd_soc_component_update_bits(component, WCD938X_AUX_AUXPA, 0x10, 0x10); } wcd938x->rx_clk_cnt++; Loading Loading @@ -539,8 +547,11 @@ static int wcd938x_codec_ear_dac_event(struct snd_soc_dapm_widget *w, WCD938X_DIGITAL_CDC_COMP_CTL_0, 0x02, 0x02); /* 5 msec delay as per HW requirement */ usleep_range(5000, 5010); snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x00); wcd938x->flyback_cur_det_disable++; wcd_cls_h_fsm(component, &wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC, WCD_CLSH_STATE_EAR, Loading Loading @@ -573,13 +584,17 @@ static int wcd938x_codec_aux_dac_event(struct snd_soc_dapm_widget *w, WCD938X_DIGITAL_CDC_DIG_CLK_CTL, 0x04, 0x04); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_AUX_GAIN_CTL, 0x01, 0x01); if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x00); wcd938x->flyback_cur_det_disable++; wcd_cls_h_fsm(component, &wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC, WCD_CLSH_STATE_AUX, wcd938x->hph_mode); break; case SND_SOC_DAPM_POST_PMD: wcd938x_rx_clk_disable(component); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x04, 0x00); break; Loading Loading @@ -630,7 +645,8 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, } snd_soc_component_update_bits(component, WCD938X_HPH_NEW_INT_HPH_TIMER1, 0x02, 0x02); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); if (wcd938x->update_wcd_event) Loading Loading @@ -706,7 +722,8 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, } snd_soc_component_update_bits(component, WCD938X_HPH_NEW_INT_HPH_TIMER1, 0x02, 0x02); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); if (wcd938x->update_wcd_event) Loading Loading @@ -762,10 +779,11 @@ static int wcd938x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, case SND_SOC_DAPM_POST_PMU: /* 1 msec delay as per HW requirement */ usleep_range(1000, 1010); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x20, 0x20); 0x02, 0x02); if (wcd938x->update_wcd_event) wcd938x->update_wcd_event(wcd938x->handle, WCD_BOLERO_EVT_RX_MUTE, Loading @@ -784,6 +802,12 @@ static int wcd938x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, WCD_CLSH_EVENT_POST_PA, WCD_CLSH_STATE_AUX, hph_mode); wcd938x->flyback_cur_det_disable--; if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x04); break; }; return ret; Loading Loading @@ -811,7 +835,8 @@ static int wcd938x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w, case SND_SOC_DAPM_POST_PMU: /* 6 msec delay as per HW requirement */ usleep_range(6000, 6010); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); Loading @@ -833,7 +858,11 @@ static int wcd938x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w, WCD_CLSH_EVENT_POST_PA, WCD_CLSH_STATE_EAR, hph_mode); snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, wcd938x->flyback_cur_det_disable--; if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x04); break; }; Loading Loading @@ -1796,7 +1825,7 @@ static const struct soc_enum tx_mode_mux_enum = static const char * const rx_hph_mode_mux_text[] = { "CLS_H_INVALID", "CLS_H_HIFI", "CLS_H_LP", "CLS_AB", "CLS_H_LOHIFI", "CLS_H_ULP", "CLS_AB_HIFI", "CLS_H_ULP", "CLS_AB_HIFI", "CLS_AB_LP", "CLS_AB_LOHIFI", }; static const struct soc_enum rx_hph_mode_mux_enum = Loading Loading
asoc/codecs/wcd938x/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ struct wcd938x_priv { /* Entry for version info */ struct snd_info_entry *entry; struct snd_info_entry *version_entry; int flyback_cur_det_disable; }; struct wcd938x_micbias_setting { Loading
asoc/codecs/wcd938x/wcd938x.c +40 −11 Original line number Diff line number Diff line Loading @@ -166,6 +166,12 @@ static int wcd938x_init_reg(struct snd_soc_component *component) 0xC0, 0x80); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_DMIC_CTL, 0x02, 0x02); snd_soc_component_update_bits(component, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP, 0xFF, 0x14); snd_soc_component_update_bits(component, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP, 0x1F, 0x08); return 0; } Loading Loading @@ -364,6 +370,8 @@ static int wcd938x_rx_clk_enable(struct snd_soc_component *component) WCD938X_DIGITAL_CDC_RX2_CTL, 0x40, 0x00); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x02, 0x02); snd_soc_component_update_bits(component, WCD938X_AUX_AUXPA, 0x10, 0x10); } wcd938x->rx_clk_cnt++; Loading Loading @@ -539,8 +547,11 @@ static int wcd938x_codec_ear_dac_event(struct snd_soc_dapm_widget *w, WCD938X_DIGITAL_CDC_COMP_CTL_0, 0x02, 0x02); /* 5 msec delay as per HW requirement */ usleep_range(5000, 5010); snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x00); wcd938x->flyback_cur_det_disable++; wcd_cls_h_fsm(component, &wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC, WCD_CLSH_STATE_EAR, Loading Loading @@ -573,13 +584,17 @@ static int wcd938x_codec_aux_dac_event(struct snd_soc_dapm_widget *w, WCD938X_DIGITAL_CDC_DIG_CLK_CTL, 0x04, 0x04); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_AUX_GAIN_CTL, 0x01, 0x01); if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x00); wcd938x->flyback_cur_det_disable++; wcd_cls_h_fsm(component, &wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC, WCD_CLSH_STATE_AUX, wcd938x->hph_mode); break; case SND_SOC_DAPM_POST_PMD: wcd938x_rx_clk_disable(component); snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x04, 0x00); break; Loading Loading @@ -630,7 +645,8 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, } snd_soc_component_update_bits(component, WCD938X_HPH_NEW_INT_HPH_TIMER1, 0x02, 0x02); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); if (wcd938x->update_wcd_event) Loading Loading @@ -706,7 +722,8 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, } snd_soc_component_update_bits(component, WCD938X_HPH_NEW_INT_HPH_TIMER1, 0x02, 0x02); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); if (wcd938x->update_wcd_event) Loading Loading @@ -762,10 +779,11 @@ static int wcd938x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, case SND_SOC_DAPM_POST_PMU: /* 1 msec delay as per HW requirement */ usleep_range(1000, 1010); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x20, 0x20); 0x02, 0x02); if (wcd938x->update_wcd_event) wcd938x->update_wcd_event(wcd938x->handle, WCD_BOLERO_EVT_RX_MUTE, Loading @@ -784,6 +802,12 @@ static int wcd938x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, WCD_CLSH_EVENT_POST_PA, WCD_CLSH_STATE_AUX, hph_mode); wcd938x->flyback_cur_det_disable--; if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x04); break; }; return ret; Loading Loading @@ -811,7 +835,8 @@ static int wcd938x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w, case SND_SOC_DAPM_POST_PMU: /* 6 msec delay as per HW requirement */ usleep_range(6000, 6010); if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI) if (hph_mode == CLS_AB || hph_mode == CLS_AB_HIFI || hph_mode == CLS_AB_LP || hph_mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD938X_ANA_RX_SUPPLIES, 0x02, 0x02); Loading @@ -833,7 +858,11 @@ static int wcd938x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w, WCD_CLSH_EVENT_POST_PA, WCD_CLSH_STATE_EAR, hph_mode); snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, wcd938x->flyback_cur_det_disable--; if (wcd938x->flyback_cur_det_disable == 0) snd_soc_component_update_bits(component, WCD938X_FLYBACK_EN, 0x04, 0x04); break; }; Loading Loading @@ -1796,7 +1825,7 @@ static const struct soc_enum tx_mode_mux_enum = static const char * const rx_hph_mode_mux_text[] = { "CLS_H_INVALID", "CLS_H_HIFI", "CLS_H_LP", "CLS_AB", "CLS_H_LOHIFI", "CLS_H_ULP", "CLS_AB_HIFI", "CLS_H_ULP", "CLS_AB_HIFI", "CLS_AB_LP", "CLS_AB_LOHIFI", }; static const struct soc_enum rx_hph_mode_mux_enum = Loading