Lines Matching full:component

16 #include <linux/component.h>
180 struct snd_soc_component *component;
332 static int wcd939x_set_swr_clk_rate(struct snd_soc_component *component, int rate, int bank)
356 snd_soc_component_write_field(component, WCD939X_DIGITAL_SWR_TX_CLK_RATE, mask, val);
361 static int wcd939x_io_init(struct snd_soc_component *component)
363 snd_soc_component_write_field(component, WCD939X_ANA_BIAS,
365 snd_soc_component_write_field(component, WCD939X_ANA_BIAS,
370 snd_soc_component_write_field(component, WCD939X_ANA_BIAS,
373 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_L,
375 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_R,
377 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DMIC_CTL,
380 snd_soc_component_write_field(component, WCD939X_TX_COM_NEW_INT_FE_ICTRL_STG2CASC_ULP,
382 snd_soc_component_write_field(component, WCD939X_TX_COM_NEW_INT_FE_ICTRL_STG2CASC_ULP,
385 snd_soc_component_write_field(component, WCD939X_TX_COM_NEW_INT_FE_ICTRL_STG2MAIN_ULP,
388 snd_soc_component_write_field(component, WCD939X_MICB1_TEST_CTL_1,
390 snd_soc_component_write_field(component, WCD939X_MICB2_TEST_CTL_1,
392 snd_soc_component_write_field(component, WCD939X_MICB3_TEST_CTL_1,
394 snd_soc_component_write_field(component, WCD939X_MICB4_TEST_CTL_1,
396 snd_soc_component_write_field(component, WCD939X_TX_3_4_TEST_BLK_EN2,
399 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
401 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
404 snd_soc_component_write_field(component, WCD939X_HPH_OCP_CTL,
406 snd_soc_component_write_field(component, WCD939X_HPH_OCP_CTL,
409 snd_soc_component_write(component, WCD939X_E_CFG0,
446 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
450 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
454 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
456 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
459 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
464 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
466 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
468 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
472 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
474 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
477 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
479 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
481 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DIG_CLK_CTL,
484 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
487 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
490 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
493 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
506 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
507 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
511 snd_soc_component_write_field(component, WCD939X_HPH_RDAC_CLK_CTL1,
515 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CTL,
519 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_L,
522 snd_soc_component_write_field(component,
528 snd_soc_component_read_field(component,
533 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_TIMER1,
537 snd_soc_component_write_field(component,
541 snd_soc_component_write_field(component, WCD939X_HPH_L_EN,
546 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_L,
548 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CTL,
560 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
561 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
563 dev_dbg(component->dev, "%s wname: %s event: %d\n", __func__,
568 snd_soc_component_write_field(component, WCD939X_HPH_RDAC_CLK_CTL1,
572 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CTL,
576 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_R,
579 snd_soc_component_write_field(component,
585 snd_soc_component_read_field(component,
589 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_TIMER1,
593 snd_soc_component_write_field(component,
597 snd_soc_component_write_field(component, WCD939X_HPH_R_EN,
602 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_RDAC_HD2_CTL_R,
604 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CTL,
616 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
617 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
621 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_EAR_GAIN_CTL,
624 snd_soc_component_write_field(component, WCD939X_EAR_DAC_CON,
632 snd_soc_component_write_field(component, WCD939X_FLYBACK_VNEG_CTRL_4,
636 snd_soc_component_write_field(component, WCD939X_EAR_DAC_CON,
648 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
649 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
655 snd_soc_component_write_field(component, WCD939X_LDOH_MODE,
663 snd_soc_component_write_field(component,
667 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
670 snd_soc_component_write_field(component, WCD939X_FLYBACK_VNEG_CTRL_4,
672 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
675 if (snd_soc_component_read_field(component, WCD939X_ANA_HPH,
680 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL1,
697 snd_soc_component_write_field(component,
703 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_TIMER1,
707 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
725 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
748 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
750 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL1,
756 snd_soc_component_write_field(component, WCD939X_LDOH_MODE,
768 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
769 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
772 dev_dbg(component->dev, "%s wname: %s event: %d\n", __func__,
778 snd_soc_component_write_field(component, WCD939X_LDOH_MODE,
785 snd_soc_component_write_field(component,
790 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
793 snd_soc_component_write_field(component, WCD939X_FLYBACK_VNEG_CTRL_4,
795 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
798 if (snd_soc_component_read_field(component, WCD939X_ANA_HPH,
803 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL0,
819 snd_soc_component_write_field(component,
825 snd_soc_component_write_field(component, WCD939X_HPH_NEW_INT_TIMER1,
829 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
846 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
867 snd_soc_component_write_field(component, WCD939X_ANA_HPH,
869 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL0,
874 snd_soc_component_write_field(component, WCD939X_LDOH_MODE,
885 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
886 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
891 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL0,
894 snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES,
896 snd_soc_component_write_field(component, WCD939X_ANA_EAR_COMPANDER_CTL,
908 snd_soc_component_write_field(component, WCD939X_ANA_EAR_COMPANDER_CTL,
913 snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL0,
929 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
969 dev_err(component->dev, "%s: Invalid DMIC Selection\n", __func__);
975 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_AMIC_CTL,
980 snd_soc_component_write_field(component,
985 snd_soc_component_write_field(component, dmic_clk_reg,
987 snd_soc_component_write_field(component, dmic_clk_en_reg,
990 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DMIC_CTL,
992 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_DMIC_CTL,
996 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_AMIC_CTL,
999 snd_soc_component_write_field(component,
1003 snd_soc_component_write_field(component, dmic_clk_en_reg,
1013 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1014 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1038 wcd939x_set_swr_clk_rate(component, rate, bank);
1039 wcd939x_set_swr_clk_rate(component, rate, !bank);
1045 wcd939x_set_swr_clk_rate(component, rate, !bank);
1046 wcd939x_set_swr_clk_rate(component, rate, bank);
1090 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1091 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1095 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
1097 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
1103 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
1106 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_ANA_CLK_CTL,
1116 static void wcd939x_tx_channel_config(struct snd_soc_component *component,
1142 snd_soc_component_write_field(component, reg, mask, init);
1148 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1149 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1154 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_REQ_CTL,
1156 snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_REQ_CTL,
1159 wcd939x_tx_channel_config(component, w->shift, true);
1162 dev_info(component->dev, "Invalid ADC mode\n");
1168 snd_soc_component_write_field(component,
1172 snd_soc_component_write_field(component,
1178 snd_soc_component_write_field(component,
1182 snd_soc_component_write_field(component,
1188 snd_soc_component_write_field(component,
1192 snd_soc_component_write_field(component,
1198 snd_soc_component_write_field(component,
1202 snd_soc_component_write_field(component,
1211 wcd939x_tx_channel_config(component, w->shift, false);
1216 snd_soc_component_write_field(component,
1220 snd_soc_component_write_field(component,
1226 snd_soc_component_write_field(component,
1230 snd_soc_component_write_field(component,
1236 snd_soc_component_write_field(component,
1240 snd_soc_component_write_field(component,
1246 snd_soc_component_write_field(component,
1250 snd_soc_component_write_field(component,
1264 static int wcd939x_micbias_control(struct snd_soc_component *component,
1267 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1285 dev_err(component->dev, "%s: Invalid micbias number: %d\n",
1295 snd_soc_component_write_field(component, micb_reg,
1304 snd_soc_component_write_field(component, micb_reg,
1311 snd_soc_component_write_field(component,
1314 snd_soc_component_write_field(component,
1317 snd_soc_component_write_field(component,
1320 snd_soc_component_write_field(component,
1323 snd_soc_component_write_field(component,
1327 snd_soc_component_write_field(component,
1331 snd_soc_component_write_field(component,
1334 snd_soc_component_write_field(component,
1337 snd_soc_component_write_field(component,
1340 snd_soc_component_write_field(component,
1343 snd_soc_component_write_field(component, micb_reg,
1360 snd_soc_component_write_field(component, micb_reg,
1369 snd_soc_component_write_field(component, micb_reg,
1389 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1394 wcd939x_micbias_control(component, micb_num, MICB_ENABLE, true);
1401 wcd939x_micbias_control(component, micb_num, MICB_DISABLE, true);
1412 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1417 wcd939x_micbias_control(component, micb_num,
1425 wcd939x_micbias_control(component, micb_num,
1436 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1437 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1449 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1450 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1467 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1468 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1478 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1479 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1515 dev_dbg(component->dev, "%s: Invalid HPH Mode\n", __func__);
1523 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1524 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1538 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1539 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1560 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1561 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1571 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1572 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1833 static void wcd939x_mbhc_clk_setup(struct snd_soc_component *component,
1836 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_1,
1840 static void wcd939x_mbhc_mbhc_bias_control(struct snd_soc_component *component,
1843 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ELECT,
1847 static void wcd939x_mbhc_program_btn_thr(struct snd_soc_component *component,
1854 dev_err(component->dev, "%s: invalid number of buttons: %d\n",
1861 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_BTN0 + i,
1863 dev_dbg(component->dev, "%s: btn_high[%d]: %d, vth: %d\n",
1868 static bool wcd939x_mbhc_micb_en_status(struct snd_soc_component *component, int micb_num)
1874 snd_soc_component_read(component, WCD939X_ANA_MICB2));
1882 static void wcd939x_mbhc_hph_l_pull_up_control(struct snd_soc_component *component,
1891 dev_dbg(component->dev, "%s: HS pull up current:%d\n",
1894 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_INT_MECH_DET_CURRENT,
1898 static int wcd939x_mbhc_request_micbias(struct snd_soc_component *component,
1901 return wcd939x_micbias_control(component, micb_num, req, false);
1904 static void wcd939x_mbhc_micb_ramp_control(struct snd_soc_component *component,
1908 snd_soc_component_write_field(component, WCD939X_ANA_MICB2_RAMP,
1910 snd_soc_component_write_field(component, WCD939X_ANA_MICB2_RAMP,
1913 snd_soc_component_write_field(component, WCD939X_ANA_MICB2_RAMP,
1915 snd_soc_component_write_field(component, WCD939X_ANA_MICB2_RAMP,
1920 static int wcd939x_mbhc_micb_adjust_voltage(struct snd_soc_component *component,
1923 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
1954 micb_en = snd_soc_component_read_field(component, micb_reg,
1956 cur_vout_ctl = snd_soc_component_read_field(component, micb_reg,
1959 req_vout_ctl = wcd_get_micb_vout_ctl_val(component->dev, req_volt);
1970 dev_dbg(component->dev, "%s: micb_num: %d, cur_mv: %d, req_mv: %d, micb_en: %d\n",
1975 snd_soc_component_write_field(component, micb_reg,
1979 snd_soc_component_write_field(component, micb_reg,
1983 snd_soc_component_write_field(component, micb_reg,
1998 static int wcd939x_mbhc_micb_ctrl_threshold_mic(struct snd_soc_component *component,
2001 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2016 return wcd939x_mbhc_micb_adjust_voltage(component, micb_mv, MIC_BIAS_2);
2038 static void wcd939x_mbhc_get_result_params(struct snd_soc_component *component,
2047 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2050 val = snd_soc_component_read_field(component, WCD939X_ANA_MBHC_RESULT_2,
2056 val |= snd_soc_component_read_field(component, WCD939X_ANA_MBHC_RESULT_1,
2058 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2068 dev_dbg(component->dev,
2081 dev_dbg(component->dev, "%s: d1=%d, c1=%d, x1=0x%x, z_val=%d(milliOhm)\n",
2086 val = snd_soc_component_read_field(component, WCD939X_ANA_MBHC_RESULT_1,
2088 val |= snd_soc_component_read_field(component, WCD939X_ANA_MBHC_RESULT_2,
2097 static void wcd939x_mbhc_zdet_ramp(struct snd_soc_component *component,
2103 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_ZDET_ANA_CTL,
2105 snd_soc_component_update_bits(component, WCD939X_ANA_MBHC_BTN5, WCD939X_MBHC_BTN5_VTH,
2107 snd_soc_component_update_bits(component, WCD939X_ANA_MBHC_BTN6, WCD939X_MBHC_BTN6_VTH,
2109 snd_soc_component_update_bits(component, WCD939X_ANA_MBHC_BTN7, WCD939X_MBHC_BTN7_VTH,
2111 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_ZDET_ANA_CTL,
2113 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_ZDET_RAMP_CTL,
2115 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_ZDET_RAMP_CTL,
2122 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2124 dev_dbg(component->dev, "%s: ramp for HPH_L, noff = %d\n",
2126 wcd939x_mbhc_get_result_params(component, &zdet);
2127 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2137 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2139 dev_dbg(component->dev, "%s: ramp for HPH_R, noff = %d\n",
2141 wcd939x_mbhc_get_result_params(component, &zdet);
2142 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ZDET,
2148 static void wcd939x_wcd_mbhc_qfuse_cal(struct snd_soc_component *component,
2154 q1 = snd_soc_component_read(component, WCD939X_DIGITAL_EFUSE_REG_21 + flag_l_r);
2164 static void wcd939x_wcd_mbhc_calc_impedance(struct snd_soc_component *component,
2167 struct wcd939x_priv *wcd939x = dev_get_drvdata(component->dev);
2173 reg0 = snd_soc_component_read(component, WCD939X_ANA_MBHC_BTN5);
2174 reg1 = snd_soc_component_read(component, WCD939X_ANA_MBHC_BTN6);
2175 reg2 = snd_soc_component_read(component, WCD939X_ANA_MBHC_BTN7);
2176 reg3 = snd_soc_component_read(component, WCD939X_MBHC_CTL_CLK);
2177 reg4 = snd_soc_component_read(component, WCD939X_MBHC_NEW_ZDET_ANA_CTL);
2179 if (snd_soc_component_read_field(component, WCD939X_ANA_MBHC_ELECT,
2181 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ELECT,
2188 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2192 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2200 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
2202 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
2209 wcd939x_mbhc_zdet_ramp(component, &z1l, NULL);
2214 wcd939x_wcd_mbhc_qfuse_cal(component, zl, 0);
2216 dev_dbg(component->dev, "%s: impedance on HPH_L = %d(ohms)\n",
2220 wcd939x_mbhc_zdet_ramp(component, NULL, &z1r);
2225 wcd939x_wcd_mbhc_qfuse_cal(component, zr, 1);
2227 dev_dbg(component->dev, "%s: impedance on HPH_R = %d(ohms)\n",
2233 dev_dbg(component->dev,
2243 dev_dbg(component->dev,
2250 snd_soc_component_write_field(component, WCD939X_HPH_R_ATEST,
2252 snd_soc_component_write_field(component, WCD939X_HPH_PA_CTL2,
2254 wcd939x_mbhc_zdet_ramp(component, &z1ls, NULL);
2255 snd_soc_component_write_field(component, WCD939X_HPH_PA_CTL2,
2257 snd_soc_component_write_field(component, WCD939X_HPH_R_ATEST,
2261 wcd939x_wcd_mbhc_qfuse_cal(component, &z1ls, 0);
2268 dev_dbg(component->dev, "%s: stereo plug type detected\n",
2272 dev_dbg(component->dev, "%s: MONO plug type detected\n",
2278 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
2280 snd_soc_component_write_field(component, WCD939X_HPH_SURGE_EN,
2284 snd_soc_component_write(component, WCD939X_ANA_MBHC_BTN5, reg0);
2285 snd_soc_component_write(component, WCD939X_ANA_MBHC_BTN6, reg1);
2286 snd_soc_component_write(component, WCD939X_ANA_MBHC_BTN7, reg2);
2289 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2294 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2297 snd_soc_component_write(component, WCD939X_MBHC_NEW_ZDET_ANA_CTL, reg4);
2298 snd_soc_component_write(component, WCD939X_MBHC_CTL_CLK, reg3);
2301 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_ELECT,
2305 static void wcd939x_mbhc_gnd_det_ctrl(struct snd_soc_component *component,
2309 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2312 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2315 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2317 snd_soc_component_write_field(component, WCD939X_ANA_MBHC_MECH,
2323 static void wcd939x_mbhc_hph_pull_down_ctrl(struct snd_soc_component *component,
2326 snd_soc_component_write_field(component, WCD939X_HPH_PA_CTL2,
2328 snd_soc_component_write_field(component, WCD939X_HPH_PA_CTL2,
2332 static void wcd939x_mbhc_moisture_config(struct snd_soc_component *component)
2334 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2337 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2344 dev_dbg(component->dev, "%s: disable moisture detection for NC\n",
2346 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2351 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2355 static void wcd939x_mbhc_moisture_detect_en(struct snd_soc_component *component, bool enable)
2357 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2360 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2364 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2368 static bool wcd939x_mbhc_get_moisture_status(struct snd_soc_component *component)
2370 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2374 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2381 dev_dbg(component->dev, "%s: disable moisture detection for NC\n",
2383 snd_soc_component_write_field(component, WCD939X_MBHC_NEW_CTL_2,
2392 if (snd_soc_component_read_field(component, WCD939X_MBHC_NEW_CTL_2,
2396 wcd939x_mbhc_moisture_detect_en(component, true);
2399 ret = !snd_soc_component_read_field(component, WCD939X_MBHC_NEW_FSM_STATUS,
2405 static void wcd939x_mbhc_moisture_polling_ctrl(struct snd_soc_component *component,
2408 snd_soc_component_write_field(component,
2435 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
2436 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2447 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
2448 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2453 dev_dbg(component->dev, "%s: zl=%u(ohms), zr=%u(ohms)\n", __func__, zl, zr);
2471 static int wcd939x_mbhc_init(struct snd_soc_component *component)
2473 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2491 wcd939x->wcd_mbhc = wcd_mbhc_init(component, &mbhc_cb, intr_ids, wcd_mbhc_fields, true);
2495 snd_soc_add_component_controls(component, impedance_detect_controls,
2497 snd_soc_add_component_controls(component, hph_type_detect_controls,
2503 static void wcd939x_mbhc_deinit(struct snd_soc_component *component)
2505 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2968 static int wcd939x_soc_codec_probe(struct snd_soc_component *component)
2970 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
2972 struct device *dev = component->dev;
2983 snd_soc_component_init_regmap(component, wcd939x->regmap);
2989 wcd939x->variant = snd_soc_component_read_field(component,
2993 wcd939x->clsh_info = wcd_clsh_ctrl_alloc(component, WCD939X);
2999 wcd939x_io_init(component);
3047 ret = snd_soc_add_component_controls(component, wcd9390_snd_controls,
3050 dev_err(component->dev,
3057 ret = snd_soc_add_component_controls(component, wcd9395_snd_controls,
3060 dev_err(component->dev,
3070 ret = wcd939x_mbhc_init(component);
3072 dev_err(component->dev, "mbhc initialization failed\n");
3090 static void wcd939x_soc_codec_remove(struct snd_soc_component *component)
3092 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);
3094 wcd939x_mbhc_deinit(component);
3165 static bool wcd939x_swap_gnd_mic(struct snd_soc_component *component)
3167 struct wcd939x_priv *wcd939x = snd_soc_component_get_drvdata(component);