Lines Matching full:component

4 #include <linux/component.h>
298 static int wcd937x_rx_clk_enable(struct snd_soc_component *component)
300 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
305 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_DIG_CLK_CTL, BIT(3), BIT(3));
306 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, BIT(0), BIT(0));
307 snd_soc_component_update_bits(component, WCD937X_ANA_RX_SUPPLIES, BIT(0), BIT(0));
308 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_RX0_CTL, BIT(6), 0x00);
309 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_RX1_CTL, BIT(6), 0x00);
310 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_RX2_CTL, BIT(6), 0x00);
311 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, BIT(1), BIT(1));
318 static int wcd937x_rx_clk_disable(struct snd_soc_component *component)
320 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
323 dev_err(component->dev, "clk already disabled\n");
329 snd_soc_component_update_bits(component, WCD937X_ANA_RX_SUPPLIES, BIT(0), 0x00);
330 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, BIT(1), 0x00);
331 snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, BIT(0), 0x00);
340 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
341 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
346 wcd937x_rx_clk_enable(component);
347 snd_soc_component_update_bits(component,
350 snd_soc_component_update_bits(component,
353 snd_soc_component_update_bits(component,
360 snd_soc_component_update_bits(component,
364 snd_soc_component_update_bits(component,
369 snd_soc_component_update_bits(component,
372 snd_soc_component_update_bits(component,
377 snd_soc_component_update_bits(component,
380 snd_soc_component_update_bits(component,
389 snd_soc_component_update_bits(component,
392 snd_soc_component_update_bits(component,
397 snd_soc_component_update_bits(component,
402 snd_soc_component_update_bits(component,
415 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
416 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
421 wcd937x_rx_clk_enable(component);
422 snd_soc_component_update_bits(component,
424 snd_soc_component_update_bits(component,
426 snd_soc_component_update_bits(component,
432 snd_soc_component_update_bits(component,
436 snd_soc_component_update_bits(component,
440 snd_soc_component_update_bits(component,
443 snd_soc_component_update_bits(component,
446 snd_soc_component_update_bits(component,
449 snd_soc_component_update_bits(component,
459 snd_soc_component_update_bits(component,
462 snd_soc_component_update_bits(component,
466 snd_soc_component_update_bits(component,
471 snd_soc_component_update_bits(component,
484 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
485 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
490 wcd937x_rx_clk_enable(component);
491 snd_soc_component_update_bits(component,
494 snd_soc_component_update_bits(component,
499 snd_soc_component_update_bits(component,
503 snd_soc_component_update_bits(component,
507 snd_soc_component_update_bits(component,
512 snd_soc_component_update_bits(component, WCD937X_FLYBACK_EN, BIT(2), 0x00);
522 snd_soc_component_update_bits(component,
526 snd_soc_component_update_bits(component,
539 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
540 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
545 wcd937x_rx_clk_enable(component);
546 snd_soc_component_update_bits(component,
549 snd_soc_component_update_bits(component,
552 snd_soc_component_update_bits(component,
562 snd_soc_component_update_bits(component,
575 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
576 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
585 snd_soc_component_update_bits(component, WCD937X_ANA_HPH,
589 snd_soc_component_update_bits(component,
602 snd_soc_component_update_bits(component,
606 snd_soc_component_update_bits(component,
626 snd_soc_component_update_bits(component,
628 snd_soc_component_update_bits(component, WCD937X_ANA_HPH,
644 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
645 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
654 snd_soc_component_update_bits(component, WCD937X_ANA_HPH,
658 snd_soc_component_update_bits(component,
670 snd_soc_component_update_bits(component,
674 snd_soc_component_update_bits(component,
694 snd_soc_component_update_bits(component,
696 snd_soc_component_update_bits(component,
712 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
713 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
722 snd_soc_component_update_bits(component,
730 snd_soc_component_update_bits(component,
744 snd_soc_component_update_bits(component,
758 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
759 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
765 wcd937x->ear_rx_path = snd_soc_component_read(component,
769 snd_soc_component_update_bits(component,
773 snd_soc_component_update_bits(component,
777 snd_soc_component_update_bits(component,
784 snd_soc_component_update_bits(component,
801 snd_soc_component_update_bits(component,
809 snd_soc_component_update_bits(component, WCD937X_FLYBACK_EN,
813 snd_soc_component_update_bits(component,
817 snd_soc_component_update_bits(component,
830 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
833 wcd937x_rx_clk_disable(component);
834 snd_soc_component_update_bits(component,
845 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
848 wcd937x_rx_clk_disable(component);
849 snd_soc_component_update_bits(component,
861 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
865 wcd937x_rx_clk_disable(component);
866 snd_soc_component_update_bits(component,
878 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
879 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
880 bool use_amic3 = snd_soc_component_read(component, WCD937X_TX_NEW_TX_CH2_SEL) & BIT(7);
893 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
894 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
899 snd_soc_component_update_bits(component,
901 snd_soc_component_update_bits(component,
903 snd_soc_component_update_bits(component,
910 snd_soc_component_update_bits(component,
921 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
922 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
926 snd_soc_component_update_bits(component,
928 snd_soc_component_update_bits(component,
930 snd_soc_component_update_bits(component,
932 snd_soc_component_update_bits(component,
934 snd_soc_component_update_bits(component,
936 snd_soc_component_update_bits(component,
938 snd_soc_component_update_bits(component,
940 snd_soc_component_update_bits(component,
942 snd_soc_component_update_bits(component,
946 snd_soc_component_update_bits(component,
948 snd_soc_component_update_bits(component,
950 snd_soc_component_update_bits(component,
952 snd_soc_component_update_bits(component,
957 snd_soc_component_update_bits(component,
963 snd_soc_component_update_bits(component,
976 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
993 dev_err(component->dev, "Invalid DMIC Selection\n");
999 snd_soc_component_update_bits(component,
1002 snd_soc_component_update_bits(component,
1004 snd_soc_component_update_bits(component,
1006 snd_soc_component_update_bits(component,
1014 static int wcd937x_micbias_control(struct snd_soc_component *component,
1017 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1022 dev_err(component->dev, "Invalid micbias index, micb_ind:%d\n", micb_index);
1036 dev_err(component->dev, "Invalid micbias number: %d\n", micb_num);
1046 snd_soc_component_update_bits(component, micb_reg,
1054 snd_soc_component_update_bits(component, micb_reg,
1061 snd_soc_component_update_bits(component,
1064 snd_soc_component_update_bits(component,
1067 snd_soc_component_update_bits(component,
1070 snd_soc_component_update_bits(component,
1073 snd_soc_component_update_bits(component,
1076 snd_soc_component_update_bits(component,
1094 snd_soc_component_update_bits(component, micb_reg,
1102 snd_soc_component_update_bits(component, micb_reg,
1113 snd_soc_component_update_bits(component,
1128 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1133 wcd937x_micbias_control(component, micb_num,
1140 wcd937x_micbias_control(component, micb_num,
1158 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1163 wcd937x_micbias_control(component, micb_num, MICB_PULLUP_ENABLE, true);
1169 wcd937x_micbias_control(component, micb_num, MICB_PULLUP_DISABLE, true);
1211 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1212 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1221 struct snd_soc_component *component =
1223 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1247 dev_dbg(component->dev, "%s: Invalid HPH Mode\n", __func__);
1254 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1255 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1270 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1271 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1360 static void wcd937x_mbhc_clk_setup(struct snd_soc_component *component,
1363 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_1,
1367 static void wcd937x_mbhc_mbhc_bias_control(struct snd_soc_component *component,
1370 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_ELECT,
1374 static void wcd937x_mbhc_program_btn_thr(struct snd_soc_component *component,
1381 dev_err(component->dev, "%s: invalid number of buttons: %d\n",
1388 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_BTN0 + i,
1393 static bool wcd937x_mbhc_micb_en_status(struct snd_soc_component *component, int micb_num)
1398 val = snd_soc_component_read_field(component,
1407 static void wcd937x_mbhc_hph_l_pull_up_control(struct snd_soc_component *component,
1414 snd_soc_component_write_field(component,
1419 static int wcd937x_mbhc_request_micbias(struct snd_soc_component *component,
1422 return wcd937x_micbias_control(component, micb_num, req, false);
1425 static void wcd937x_mbhc_micb_ramp_control(struct snd_soc_component *component,
1429 snd_soc_component_write_field(component, WCD937X_ANA_MICB2_RAMP,
1431 snd_soc_component_write_field(component, WCD937X_ANA_MICB2_RAMP,
1434 snd_soc_component_write_field(component, WCD937X_ANA_MICB2_RAMP,
1436 snd_soc_component_write_field(component, WCD937X_ANA_MICB2_RAMP,
1441 static int wcd937x_mbhc_micb_adjust_voltage(struct snd_soc_component *component,
1444 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1469 micb_en = snd_soc_component_read_field(component, micb_reg,
1471 cur_vout_ctl = snd_soc_component_read_field(component, micb_reg,
1474 req_vout_ctl = wcd_get_micb_vout_ctl_val(component->dev, req_volt);
1486 snd_soc_component_write_field(component, micb_reg,
1490 snd_soc_component_write_field(component, micb_reg,
1495 snd_soc_component_write_field(component, micb_reg,
1509 static int wcd937x_mbhc_micb_ctrl_threshold_mic(struct snd_soc_component *component,
1512 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1527 return wcd937x_mbhc_micb_adjust_voltage(component, micb_mv, MIC_BIAS_2);
1530 static void wcd937x_mbhc_get_result_params(struct snd_soc_component *component,
1534 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1561 dev_err(component->dev, "Impedance detect ramp error, c1=%d, x1=0x%x\n",
1572 dev_err(component->dev, "%s: d1=%d, c1=%d, x1=0x%x, z_val=%d (milliohm)\n",
1590 static void wcd937x_mbhc_zdet_ramp(struct snd_soc_component *component,
1594 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1597 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_ZDET_ANA_CTL,
1599 snd_soc_component_update_bits(component, WCD937X_ANA_MBHC_BTN5,
1601 snd_soc_component_update_bits(component, WCD937X_ANA_MBHC_BTN6,
1603 snd_soc_component_update_bits(component, WCD937X_ANA_MBHC_BTN7,
1605 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_ZDET_ANA_CTL,
1607 snd_soc_component_update_bits(component, WCD937X_MBHC_NEW_ZDET_RAMP_CTL,
1615 wcd937x_mbhc_get_result_params(component, d1_a, zdet_param->noff, &zdet);
1627 wcd937x_mbhc_get_result_params(component, d1_a, zdet_param->noff, &zdet);
1634 static void wcd937x_wcd_mbhc_qfuse_cal(struct snd_soc_component *component,
1641 q1 = snd_soc_component_read(component,
1644 q1 = snd_soc_component_read(component,
1654 static void wcd937x_wcd_mbhc_calc_impedance(struct snd_soc_component *component,
1657 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1677 reg0 = snd_soc_component_read(component, WCD937X_ANA_MBHC_BTN5);
1678 reg1 = snd_soc_component_read(component, WCD937X_ANA_MBHC_BTN6);
1679 reg2 = snd_soc_component_read(component, WCD937X_ANA_MBHC_BTN7);
1680 reg3 = snd_soc_component_read(component, WCD937X_MBHC_CTL_CLK);
1681 reg4 = snd_soc_component_read(component, WCD937X_MBHC_NEW_ZDET_ANA_CTL);
1683 if (snd_soc_component_read(component, WCD937X_ANA_MBHC_ELECT) & 0x80) {
1709 wcd937x_mbhc_zdet_ramp(component, zdet_param_ptr, &z1l, NULL, d1);
1726 wcd937x_mbhc_zdet_ramp(component, zdet_param_ptr, &z1l, NULL, d1);
1736 wcd937x_wcd_mbhc_qfuse_cal(component, zl, 0);
1740 wcd937x_mbhc_zdet_ramp(component, zdet_param_ptr, NULL, &z1r, d1);
1758 wcd937x_mbhc_zdet_ramp(component, zdet_param_ptr, NULL, &z1r, d1);
1766 wcd937x_wcd_mbhc_qfuse_cal(component, zr, 1);
1772 dev_err(component->dev,
1784 snd_soc_component_write_field(component, WCD937X_HPH_R_ATEST,
1786 snd_soc_component_write_field(component, WCD937X_HPH_PA_CTL2,
1789 wcd937x_mbhc_zdet_ramp(component, &zdet_param[0], &z1ls, NULL, d1);
1791 wcd937x_mbhc_zdet_ramp(component, &zdet_param[1], &z1ls, NULL, d1);
1792 snd_soc_component_write_field(component, WCD937X_HPH_PA_CTL2,
1794 snd_soc_component_write_field(component, WCD937X_HPH_R_ATEST,
1797 wcd937x_wcd_mbhc_qfuse_cal(component, &z1ls, 0);
1811 snd_soc_component_write(component, WCD937X_ANA_MBHC_BTN5, reg0);
1812 snd_soc_component_write(component, WCD937X_ANA_MBHC_BTN6, reg1);
1813 snd_soc_component_write(component, WCD937X_ANA_MBHC_BTN7, reg2);
1823 snd_soc_component_write(component, WCD937X_MBHC_NEW_ZDET_ANA_CTL, reg4);
1824 snd_soc_component_write(component, WCD937X_MBHC_CTL_CLK, reg3);
1830 static void wcd937x_mbhc_gnd_det_ctrl(struct snd_soc_component *component,
1834 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_MECH,
1836 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_MECH,
1839 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_MECH,
1841 snd_soc_component_write_field(component, WCD937X_ANA_MBHC_MECH,
1846 static void wcd937x_mbhc_hph_pull_down_ctrl(struct snd_soc_component *component,
1849 snd_soc_component_write_field(component, WCD937X_HPH_PA_CTL2,
1851 snd_soc_component_write_field(component, WCD937X_HPH_PA_CTL2,
1855 static void wcd937x_mbhc_moisture_config(struct snd_soc_component *component)
1857 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1860 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1867 dev_err(component->dev, "%s: disable moisture detection for NC\n",
1869 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1874 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1878 static void wcd937x_mbhc_moisture_detect_en(struct snd_soc_component *component, bool enable)
1880 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1883 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1886 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1890 static bool wcd937x_mbhc_get_moisture_status(struct snd_soc_component *component)
1892 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1896 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1903 dev_err(component->dev, "%s: disable moisture detection for NC\n",
1905 snd_soc_component_write_field(component, WCD937X_MBHC_NEW_CTL_2,
1914 if (snd_soc_component_read_field(component, WCD937X_MBHC_NEW_CTL_2, WCD937X_M_RTH_CTL_MASK))
1917 wcd937x_mbhc_moisture_detect_en(component, true);
1919 ret = ((snd_soc_component_read(component, WCD937X_MBHC_NEW_FSM_STATUS)
1925 static void wcd937x_mbhc_moisture_polling_ctrl(struct snd_soc_component *component,
1928 snd_soc_component_write_field(component,
1954 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1955 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1968 struct snd_soc_component *component =
1970 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
1992 static int wcd937x_mbhc_init(struct snd_soc_component *component)
1994 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
2012 wcd937x->wcd_mbhc = wcd_mbhc_init(component, &mbhc_cb, intr_ids, wcd_mbhc_fields, true);
2016 snd_soc_add_component_controls(component, impedance_detect_controls,
2018 snd_soc_add_component_controls(component, hph_type_detect_controls,
2024 static void wcd937x_mbhc_deinit(struct snd_soc_component *component)
2026 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
2476 static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
2478 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2479 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
2481 struct device *dev = component->dev;
2493 snd_soc_component_init_regmap(component, wcd937x->regmap);
2498 chipid = (snd_soc_component_read(component,
2506 wcd937x->clsh_info = wcd_clsh_ctrl_alloc(component, WCD937X);
2554 dev_err(component->dev, "Failed to add snd_ctls\n");
2562 dev_err(component->dev, "Failed to add routes\n");
2568 ret = wcd937x_mbhc_init(component);
2570 dev_err(component->dev, "mbhc initialization failed\n");
2575 static void wcd937x_soc_codec_remove(struct snd_soc_component *component)
2577 struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
2579 wcd937x_mbhc_deinit(component);
2615 static bool wcd937x_swap_gnd_mic(struct snd_soc_component *component)
2620 wcd937x = snd_soc_component_get_drvdata(component);