Lines Matching refs:wcd938x

26 #include "wcd938x.h"
300 .name = "wcd938x",
367 static int wcd938x_io_init(struct wcd938x_priv *wcd938x)
369 struct regmap *rm = wcd938x->regmap;
492 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
510 if (wcd938x->comp1_enable) {
515 if (!wcd938x->comp2_enable || (snd_soc_component_read(component,
546 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
564 if (wcd938x->comp2_enable) {
569 if (!wcd938x->comp1_enable ||
600 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
604 wcd938x->ear_rx_path =
607 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX) {
627 if (wcd938x->comp1_enable)
634 if (wcd938x->flyback_cur_det_disable == 0)
637 wcd938x->flyback_cur_det_disable++;
638 wcd_clsh_ctrl_set_state(wcd938x->clsh_info,
641 wcd938x->hph_mode);
644 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX) {
658 if (wcd938x->comp1_enable)
679 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
692 if (wcd938x->flyback_cur_det_disable == 0)
695 wcd938x->flyback_cur_det_disable++;
696 wcd_clsh_ctrl_set_state(wcd938x->clsh_info,
699 wcd938x->hph_mode);
715 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
716 int hph_mode = wcd938x->hph_mode;
720 if (wcd938x->ldoh)
723 wcd_clsh_ctrl_set_state(wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC,
725 wcd_clsh_set_hph_mode(wcd938x->clsh_info, CLS_H_HIFI);
735 wcd_clsh_set_hph_mode(wcd938x->clsh_info, hph_mode);
738 set_bit(HPH_PA_DELAY, &wcd938x->status_mask);
749 if (test_bit(HPH_PA_DELAY, &wcd938x->status_mask)) {
750 if (!wcd938x->comp2_enable)
760 clear_bit(HPH_PA_DELAY, &wcd938x->status_mask);
769 enable_irq(wcd938x->hphr_pdm_wd_int);
772 disable_irq_nosync(wcd938x->hphr_pdm_wd_int);
778 if (!wcd938x->comp2_enable)
784 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
786 set_bit(HPH_PA_DELAY, &wcd938x->status_mask);
794 if (test_bit(HPH_PA_DELAY, &wcd938x->status_mask)) {
795 if (!wcd938x->comp2_enable)
799 clear_bit(HPH_PA_DELAY, &wcd938x->status_mask);
801 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
807 wcd_clsh_ctrl_set_state(wcd938x->clsh_info, WCD_CLSH_EVENT_POST_PA,
809 if (wcd938x->ldoh)
822 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
823 int hph_mode = wcd938x->hph_mode;
827 if (wcd938x->ldoh)
830 wcd_clsh_ctrl_set_state(wcd938x->clsh_info, WCD_CLSH_EVENT_PRE_DAC,
832 wcd_clsh_set_hph_mode(wcd938x->clsh_info, CLS_H_HIFI);
841 wcd_clsh_set_hph_mode(wcd938x->clsh_info, hph_mode);
844 set_bit(HPH_PA_DELAY, &wcd938x->status_mask);
855 if (test_bit(HPH_PA_DELAY, &wcd938x->status_mask)) {
856 if (!wcd938x->comp1_enable)
865 clear_bit(HPH_PA_DELAY, &wcd938x->status_mask);
875 enable_irq(wcd938x->hphl_pdm_wd_int);
878 disable_irq_nosync(wcd938x->hphl_pdm_wd_int);
884 if (!wcd938x->comp1_enable)
890 wcd_mbhc_event_notify(wcd938x->wcd_mbhc, WCD_EVENT_PRE_HPHL_PA_OFF);
891 set_bit(HPH_PA_DELAY, &wcd938x->status_mask);
899 if (test_bit(HPH_PA_DELAY, &wcd938x->status_mask)) {
900 if (!wcd938x->comp1_enable)
904 clear_bit(HPH_PA_DELAY, &wcd938x->status_mask);
906 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
912 wcd_clsh_ctrl_set_state(wcd938x->clsh_info, WCD_CLSH_EVENT_POST_PA,
914 if (wcd938x->ldoh)
927 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
928 int hph_mode = wcd938x->hph_mode;
943 enable_irq(wcd938x->aux_pdm_wd_int);
946 disable_irq_nosync(wcd938x->aux_pdm_wd_int);
953 wcd_clsh_ctrl_set_state(wcd938x->clsh_info,
958 wcd938x->flyback_cur_det_disable--;
959 if (wcd938x->flyback_cur_det_disable == 0)
971 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
972 int hph_mode = wcd938x->hph_mode;
980 wcd938x->ear_rx_path = snd_soc_component_read(component,
982 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX)
989 if (!wcd938x->comp1_enable)
1003 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX)
1004 enable_irq(wcd938x->aux_pdm_wd_int);
1006 enable_irq(wcd938x->hphl_pdm_wd_int);
1009 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX)
1010 disable_irq_nosync(wcd938x->aux_pdm_wd_int);
1012 disable_irq_nosync(wcd938x->hphl_pdm_wd_int);
1015 if (!wcd938x->comp1_enable)
1020 if (wcd938x->ear_rx_path & EAR_RX_PATH_AUX)
1027 wcd_clsh_ctrl_set_state(wcd938x->clsh_info, WCD_CLSH_EVENT_POST_PA,
1030 wcd938x->flyback_cur_det_disable--;
1031 if (wcd938x->flyback_cur_det_disable == 0)
1116 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1120 bank = (wcd938x_swr_get_current_bank(wcd938x->sdw_priv[AIF1_CAP]->sdev)) ? 0 : 1;
1128 if (test_bit(WCD_ADC1, &wcd938x->status_mask))
1129 mode |= tx_mode_bit[wcd938x->tx_mode[WCD_ADC1]];
1130 if (test_bit(WCD_ADC2, &wcd938x->status_mask))
1131 mode |= tx_mode_bit[wcd938x->tx_mode[WCD_ADC2]];
1132 if (test_bit(WCD_ADC3, &wcd938x->status_mask))
1133 mode |= tx_mode_bit[wcd938x->tx_mode[WCD_ADC3]];
1134 if (test_bit(WCD_ADC4, &wcd938x->status_mask))
1135 mode |= tx_mode_bit[wcd938x->tx_mode[WCD_ADC4]];
1200 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1210 set_bit(w->shift, &wcd938x->status_mask);
1215 clear_bit(w->shift, &wcd938x->status_mask);
1255 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1267 mode = wcd938x_get_adc_mode(wcd938x->tx_mode[w->shift]);
1360 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1385 wcd938x->pullup_ref[micb_index]++;
1386 if ((wcd938x->pullup_ref[micb_index] == 1) &&
1387 (wcd938x->micb_ref[micb_index] == 0))
1393 if (wcd938x->pullup_ref[micb_index] > 0)
1394 wcd938x->pullup_ref[micb_index]--;
1396 if ((wcd938x->pullup_ref[micb_index] == 0) &&
1397 (wcd938x->micb_ref[micb_index] == 0))
1402 wcd938x->micb_ref[micb_index]++;
1403 if (wcd938x->micb_ref[micb_index] == 1) {
1418 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
1422 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
1428 if (wcd938x->micb_ref[micb_index] > 0)
1429 wcd938x->micb_ref[micb_index]--;
1431 if ((wcd938x->micb_ref[micb_index] == 0) &&
1432 (wcd938x->pullup_ref[micb_index] > 0))
1436 else if ((wcd938x->micb_ref[micb_index] == 0) &&
1437 (wcd938x->pullup_ref[micb_index] == 0)) {
1439 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
1445 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
1449 wcd_mbhc_event_notify(wcd938x->wcd_mbhc,
1509 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1513 ucontrol->value.enumerated.item[0] = wcd938x->tx_mode[path];
1522 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1526 if (wcd938x->tx_mode[path] == ucontrol->value.enumerated.item[0])
1529 wcd938x->tx_mode[path] = ucontrol->value.enumerated.item[0];
1538 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1540 ucontrol->value.enumerated.item[0] = wcd938x->hph_mode;
1549 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1551 if (wcd938x->hph_mode == ucontrol->value.enumerated.item[0])
1554 wcd938x->hph_mode = ucontrol->value.enumerated.item[0];
1563 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1565 if (wcd938x->comp1_enable) {
1582 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1590 ucontrol->value.integer.value[0] = wcd938x->comp2_enable;
1592 ucontrol->value.integer.value[0] = wcd938x->comp1_enable;
1601 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1611 wcd = wcd938x->sdw_priv[AIF1_PB];
1614 wcd938x->comp2_enable = value;
1616 wcd938x->comp1_enable = value;
1632 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1634 ucontrol->value.integer.value[0] = wcd938x->ldoh;
1643 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1645 if (wcd938x->ldoh == ucontrol->value.integer.value[0])
1648 wcd938x->ldoh = ucontrol->value.integer.value[0];
1657 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1659 ucontrol->value.integer.value[0] = wcd938x->bcs_dis;
1668 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
1670 if (wcd938x->bcs_dis == ucontrol->value.integer.value[0])
1673 wcd938x->bcs_dis = ucontrol->value.integer.value[0];
1898 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(comp);
1905 wcd = wcd938x->sdw_priv[dai_id];
1917 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(comp);
1926 wcd = wcd938x->sdw_priv[dai_id];
2038 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2057 mutex_lock(&wcd938x->micb_lock);
2102 mutex_unlock(&wcd938x->micb_lock);
2109 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2119 if (wcd938x->micb2_mv >= WCD_MBHC_THR_HS_MICB_MV)
2122 micb_mv = req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd938x->micb2_mv;
2131 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2141 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MBHC_ZDET, 0x20, 0x20);
2143 regmap_read(wcd938x->regmap, WCD938X_ANA_MBHC_RESULT_2, &val);
2148 regmap_read(wcd938x->regmap, WCD938X_ANA_MBHC_RESULT_1, &val1);
2150 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MBHC_ZDET, 0x20, 0x00);
2174 regmap_read(wcd938x->regmap,
2176 regmap_read(wcd938x->regmap,
2191 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2210 regmap_update_bits(wcd938x->regmap,
2215 regmap_update_bits(wcd938x->regmap,
2224 regmap_update_bits(wcd938x->regmap,
2229 regmap_update_bits(wcd938x->regmap,
2258 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2286 regmap_update_bits(wcd938x->regmap,
2291 if (wcd938x->mbhc_cfg.hphl_swh)
2292 regmap_update_bits(wcd938x->regmap,
2296 regmap_update_bits(wcd938x->regmap,
2302 regmap_update_bits(wcd938x->regmap,
2389 wcd_mbhc_set_hph_type(wcd938x->wcd_mbhc, WCD_MBHC_HPH_MONO);
2413 wcd_mbhc_set_hph_type(wcd938x->wcd_mbhc, WCD_MBHC_HPH_STEREO);
2417 wcd_mbhc_set_hph_type(wcd938x->wcd_mbhc, WCD_MBHC_HPH_MONO);
2421 regmap_update_bits(wcd938x->regmap,
2428 regmap_update_bits(wcd938x->regmap,
2432 if (wcd938x->mbhc_cfg.hphl_swh)
2433 regmap_update_bits(wcd938x->regmap,
2439 regmap_update_bits(wcd938x->regmap,
2470 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2472 if (wcd938x->mbhc_cfg.moist_rref == R_OFF) {
2479 if (!wcd938x->mbhc_cfg.hphl_swh) {
2488 WCD938X_M_RTH_CTL_MASK, wcd938x->mbhc_cfg.moist_rref);
2493 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2497 WCD938X_M_RTH_CTL_MASK, wcd938x->mbhc_cfg.moist_rref);
2505 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2508 if (wcd938x->mbhc_cfg.moist_rref == R_OFF) {
2515 if (!wcd938x->mbhc_cfg.hphl_swh) {
2570 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2572 ucontrol->value.integer.value[0] = wcd_mbhc_get_hph_type(wcd938x->wcd_mbhc);
2585 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2589 wcd_mbhc_get_impedance(wcd938x->wcd_mbhc, &zl, &zr);
2610 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2611 struct wcd_mbhc_intr *intr_ids = &wcd938x->intr_ids;
2613 intr_ids->mbhc_sw_intr = regmap_irq_get_virq(wcd938x->irq_chip,
2615 intr_ids->mbhc_btn_press_intr = regmap_irq_get_virq(wcd938x->irq_chip,
2617 intr_ids->mbhc_btn_release_intr = regmap_irq_get_virq(wcd938x->irq_chip,
2619 intr_ids->mbhc_hs_ins_intr = regmap_irq_get_virq(wcd938x->irq_chip,
2621 intr_ids->mbhc_hs_rem_intr = regmap_irq_get_virq(wcd938x->irq_chip,
2623 intr_ids->hph_left_ocp = regmap_irq_get_virq(wcd938x->irq_chip,
2625 intr_ids->hph_right_ocp = regmap_irq_get_virq(wcd938x->irq_chip,
2628 wcd938x->wcd_mbhc = wcd_mbhc_init(component, &mbhc_cb, intr_ids, wcd_mbhc_fields, true);
2629 if (IS_ERR(wcd938x->wcd_mbhc))
2630 return PTR_ERR(wcd938x->wcd_mbhc);
2642 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
2644 wcd_mbhc_deinit(wcd938x->wcd_mbhc);
3029 static int wcd938x_set_micbias_data(struct wcd938x_priv *wcd938x)
3034 vout_ctl_1 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb1_mv);
3035 vout_ctl_2 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb2_mv);
3036 vout_ctl_3 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb3_mv);
3037 vout_ctl_4 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb4_mv);
3041 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB1,
3043 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB2,
3045 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB3,
3047 regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB4,
3093 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
3094 struct sdw_slave *tx_sdw_dev = wcd938x->tx_sdw_dev;
3106 snd_soc_component_init_regmap(component, wcd938x->regmap);
3112 wcd938x->variant = snd_soc_component_read_field(component,
3116 wcd938x->clsh_info = wcd_clsh_ctrl_alloc(component, WCD938X);
3117 if (IS_ERR(wcd938x->clsh_info)) {
3119 return PTR_ERR(wcd938x->clsh_info);
3122 wcd938x_io_init(wcd938x);
3125 regmap_write(wcd938x->regmap,
3131 wcd938x->hphr_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip,
3133 wcd938x->hphl_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip,
3135 wcd938x->aux_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip,
3139 ret = request_threaded_irq(wcd938x->hphr_pdm_wd_int, NULL, wcd938x_wd_handle_irq,
3141 "HPHR PDM WD INT", wcd938x);
3147 ret = request_threaded_irq(wcd938x->hphl_pdm_wd_int, NULL, wcd938x_wd_handle_irq,
3149 "HPHL PDM WD INT", wcd938x);
3155 ret = request_threaded_irq(wcd938x->aux_pdm_wd_int, NULL, wcd938x_wd_handle_irq,
3157 "AUX PDM WD INT", wcd938x);
3164 disable_irq_nosync(wcd938x->hphr_pdm_wd_int);
3165 disable_irq_nosync(wcd938x->hphl_pdm_wd_int);
3166 disable_irq_nosync(wcd938x->aux_pdm_wd_int);
3168 switch (wcd938x->variant) {
3175 __func__, wcd938x->variant);
3185 __func__, wcd938x->variant);
3202 free_irq(wcd938x->aux_pdm_wd_int, wcd938x);
3204 free_irq(wcd938x->hphl_pdm_wd_int, wcd938x);
3206 free_irq(wcd938x->hphr_pdm_wd_int, wcd938x);
3208 wcd_clsh_ctrl_free(wcd938x->clsh_info);
3215 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
3219 free_irq(wcd938x->aux_pdm_wd_int, wcd938x);
3220 free_irq(wcd938x->hphl_pdm_wd_int, wcd938x);
3221 free_irq(wcd938x->hphr_pdm_wd_int, wcd938x);
3223 wcd_clsh_ctrl_free(wcd938x->clsh_info);
3288 struct wcd938x_priv *wcd938x;
3290 wcd938x = snd_soc_component_get_drvdata(component);
3292 value = gpiod_get_value(wcd938x->us_euro_gpio);
3294 gpiod_set_value(wcd938x->us_euro_gpio, !value);
3300 static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device *dev)
3302 struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg;
3305 wcd938x->reset_gpio = of_get_named_gpio(dev->of_node, "reset-gpios", 0);
3306 if (wcd938x->reset_gpio < 0)
3307 return dev_err_probe(dev, wcd938x->reset_gpio,
3310 wcd938x->us_euro_gpio = devm_gpiod_get_optional(dev, "us-euro",
3312 if (IS_ERR(wcd938x->us_euro_gpio))
3313 return dev_err_probe(dev, PTR_ERR(wcd938x->us_euro_gpio),
3318 wcd938x->supplies[0].supply = "vdd-rxtx";
3319 wcd938x->supplies[1].supply = "vdd-io";
3320 wcd938x->supplies[2].supply = "vdd-buck";
3321 wcd938x->supplies[3].supply = "vdd-mic-bias";
3323 ret = regulator_bulk_get(dev, WCD938X_MAX_SUPPLY, wcd938x->supplies);
3327 ret = regulator_bulk_enable(WCD938X_MAX_SUPPLY, wcd938x->supplies);
3329 regulator_bulk_free(WCD938X_MAX_SUPPLY, wcd938x->supplies);
3333 wcd938x_dt_parse_micbias_info(dev, wcd938x);
3339 cfg->micb_mv = wcd938x->micb2_mv;
3349 static int wcd938x_reset(struct wcd938x_priv *wcd938x)
3351 gpio_direction_output(wcd938x->reset_gpio, 0);
3354 gpio_set_value(wcd938x->reset_gpio, 1);
3365 struct wcd938x_priv *wcd938x = dev_get_drvdata(dai->dev);
3366 struct wcd938x_sdw_priv *wcd = wcd938x->sdw_priv[dai->id];
3374 struct wcd938x_priv *wcd938x = dev_get_drvdata(dai->dev);
3375 struct wcd938x_sdw_priv *wcd = wcd938x->sdw_priv[dai->id];
3383 struct wcd938x_priv *wcd938x = dev_get_drvdata(dai->dev);
3384 struct wcd938x_sdw_priv *wcd = wcd938x->sdw_priv[dai->id];
3398 .name = "wcd938x-sdw-rx",
3411 .name = "wcd938x-sdw-tx",
3427 struct wcd938x_priv *wcd938x = dev_get_drvdata(dev);
3430 ret = component_bind_all(dev, wcd938x);
3437 wcd938x->rxdev = wcd938x_sdw_device_get(wcd938x->rxnode);
3438 if (!wcd938x->rxdev) {
3443 wcd938x->sdw_priv[AIF1_PB] = dev_get_drvdata(wcd938x->rxdev);
3444 wcd938x->sdw_priv[AIF1_PB]->wcd938x = wcd938x;
3446 wcd938x->txdev = wcd938x_sdw_device_get(wcd938x->txnode);
3447 if (!wcd938x->txdev) {
3452 wcd938x->sdw_priv[AIF1_CAP] = dev_get_drvdata(wcd938x->txdev);
3453 wcd938x->sdw_priv[AIF1_CAP]->wcd938x = wcd938x;
3454 wcd938x->tx_sdw_dev = dev_to_sdw_dev(wcd938x->txdev);
3458 if (!device_link_add(wcd938x->rxdev, wcd938x->txdev, DL_FLAG_STATELESS |
3465 if (!device_link_add(dev, wcd938x->txdev, DL_FLAG_STATELESS |
3472 if (!device_link_add(dev, wcd938x->rxdev, DL_FLAG_STATELESS |
3479 wcd938x->regmap = dev_get_regmap(&wcd938x->tx_sdw_dev->dev, NULL);
3480 if (!wcd938x->regmap) {
3486 ret = wcd938x_irq_init(wcd938x, dev);
3492 wcd938x->sdw_priv[AIF1_PB]->slave_irq = wcd938x->virq;
3493 wcd938x->sdw_priv[AIF1_CAP]->slave_irq = wcd938x->virq;
3495 ret = wcd938x_set_micbias_data(wcd938x);
3512 device_link_remove(dev, wcd938x->rxdev);
3514 device_link_remove(dev, wcd938x->txdev);
3516 device_link_remove(wcd938x->rxdev, wcd938x->txdev);
3518 put_device(wcd938x->txdev);
3520 put_device(wcd938x->rxdev);
3522 component_unbind_all(dev, wcd938x);
3529 struct wcd938x_priv *wcd938x = dev_get_drvdata(dev);
3532 device_link_remove(dev, wcd938x->txdev);
3533 device_link_remove(dev, wcd938x->rxdev);
3534 device_link_remove(wcd938x->rxdev, wcd938x->txdev);
3535 put_device(wcd938x->txdev);
3536 put_device(wcd938x->rxdev);
3537 component_unbind_all(dev, wcd938x);
3545 static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x,
3553 wcd938x->rxnode = of_parse_phandle(np, "qcom,rx-device", 0);
3554 if (!wcd938x->rxnode) {
3559 of_node_get(wcd938x->rxnode);
3561 component_compare_of, wcd938x->rxnode);
3563 wcd938x->txnode = of_parse_phandle(np, "qcom,tx-device", 0);
3564 if (!wcd938x->txnode) {
3568 of_node_get(wcd938x->txnode);
3570 component_compare_of, wcd938x->txnode);
3577 struct wcd938x_priv *wcd938x = NULL;
3581 wcd938x = devm_kzalloc(dev, sizeof(struct wcd938x_priv),
3583 if (!wcd938x)
3586 dev_set_drvdata(dev, wcd938x);
3587 mutex_init(&wcd938x->micb_lock);
3589 ret = wcd938x_populate_dt_data(wcd938x, dev);
3595 ret = wcd938x_add_slave_components(wcd938x, dev, &match);
3599 wcd938x_reset(wcd938x);
3615 regulator_bulk_disable(WCD938X_MAX_SUPPLY, wcd938x->supplies);
3616 regulator_bulk_free(WCD938X_MAX_SUPPLY, wcd938x->supplies);
3624 struct wcd938x_priv *wcd938x = dev_get_drvdata(dev);
3632 regulator_bulk_disable(WCD938X_MAX_SUPPLY, wcd938x->supplies);
3633 regulator_bulk_free(WCD938X_MAX_SUPPLY, wcd938x->supplies);