Lines Matching +full:pga +full:- +full:gain
2 * da7218.c - DA7218 ALSA SoC Codec Driver
26 #include <sound/soc-dapm.h>
41 static const DECLARE_TLV_DB_SCALE(da7218_mic_gain_tlv, -600, 600, 0);
42 static const DECLARE_TLV_DB_SCALE(da7218_mixin_gain_tlv, -450, 150, 0);
43 static const DECLARE_TLV_DB_SCALE(da7218_in_dig_gain_tlv, -8325, 75, 0);
44 static const DECLARE_TLV_DB_SCALE(da7218_ags_trigger_tlv, -9000, 600, 0);
46 static const DECLARE_TLV_DB_SCALE(da7218_alc_threshold_tlv, -9450, 150, 0);
51 static const DECLARE_TLV_DB_SCALE(da7218_dmix_gain_tlv, -4200, 150, 0);
54 static const DECLARE_TLV_DB_SCALE(da7218_dgs_trigger_tlv, -9450, 150, 0);
55 static const DECLARE_TLV_DB_SCALE(da7218_dgs_anticlip_tlv, -4200, 600, 0);
56 static const DECLARE_TLV_DB_SCALE(da7218_dgs_signal_tlv, -9000, 600, 0);
57 static const DECLARE_TLV_DB_SCALE(da7218_out_eq_band_tlv, -1050, 150, 0);
58 static const DECLARE_TLV_DB_SCALE(da7218_out_dig_gain_tlv, -8325, 75, 0);
59 static const DECLARE_TLV_DB_SCALE(da7218_dac_ng_threshold_tlv, -10200, 600, 0);
60 static const DECLARE_TLV_DB_SCALE(da7218_mixout_gain_tlv, -100, 50, 0);
61 static const DECLARE_TLV_DB_SCALE(da7218_hp_gain_tlv, -5700, 150, 0);
205 "Sum", "SWG1", "SWG2", "SWG1_1-Cos"
389 dev_warn(component->dev, in da7218_alc_calib()
390 "ALC auto calibration failed - %s\n", in da7218_alc_calib()
442 if ((ret == 1) && (da7218->alc_en)) in da7218_mixin_gain_put()
452 (struct soc_mixer_control *) kcontrol->private_value; in da7218_alc_sw_put()
455 unsigned int lvalue = ucontrol->value.integer.value[0]; in da7218_alc_sw_put()
456 unsigned int rvalue = ucontrol->value.integer.value[1]; in da7218_alc_sw_put()
457 unsigned int lshift = mc->shift; in da7218_alc_sw_put()
458 unsigned int rshift = mc->rshift; in da7218_alc_sw_put()
459 unsigned int mask = (mc->max << lshift) | (mc->max << rshift); in da7218_alc_sw_put()
462 if ((lvalue || rvalue) && (!da7218->alc_en)) in da7218_alc_sw_put()
466 da7218->alc_en &= ~mask; in da7218_alc_sw_put()
467 da7218->alc_en |= (lvalue << lshift) | (rvalue << rshift); in da7218_alc_sw_put()
479 (struct soc_mixer_control *) kcontrol->private_value; in da7218_tonegen_freq_get()
480 unsigned int reg = mixer_ctrl->reg; in da7218_tonegen_freq_get()
485 * Frequency value spans two 8-bit registers, lower then upper byte. in da7218_tonegen_freq_get()
488 ret = regmap_raw_read(da7218->regmap, reg, &val, 2); in da7218_tonegen_freq_get()
492 ucontrol->value.integer.value[0] = le16_to_cpu(val); in da7218_tonegen_freq_get()
503 (struct soc_mixer_control *) kcontrol->private_value; in da7218_tonegen_freq_put()
504 unsigned int reg = mixer_ctrl->reg; in da7218_tonegen_freq_put()
508 * Frequency value spans two 8-bit registers, lower then upper byte. in da7218_tonegen_freq_put()
512 val = cpu_to_le16(ucontrol->value.integer.value[0]); in da7218_tonegen_freq_put()
514 return regmap_raw_write(da7218->regmap, reg, &val, 2); in da7218_tonegen_freq_put()
523 (struct soc_mixer_control *) kcontrol->private_value; in da7218_mic_lvl_det_sw_put()
524 unsigned int lvalue = ucontrol->value.integer.value[0]; in da7218_mic_lvl_det_sw_put()
525 unsigned int rvalue = ucontrol->value.integer.value[1]; in da7218_mic_lvl_det_sw_put()
526 unsigned int lshift = mixer_ctrl->shift; in da7218_mic_lvl_det_sw_put()
527 unsigned int rshift = mixer_ctrl->rshift; in da7218_mic_lvl_det_sw_put()
528 unsigned int mask = (mixer_ctrl->max << lshift) | in da7218_mic_lvl_det_sw_put()
529 (mixer_ctrl->max << rshift); in da7218_mic_lvl_det_sw_put()
530 da7218->mic_lvl_det_en &= ~mask; in da7218_mic_lvl_det_sw_put()
531 da7218->mic_lvl_det_en |= (lvalue << lshift) | (rvalue << rshift); in da7218_mic_lvl_det_sw_put()
540 return snd_soc_component_write(component, mixer_ctrl->reg, in da7218_mic_lvl_det_sw_put()
541 (da7218->in_filt_en & da7218->mic_lvl_det_en)); in da7218_mic_lvl_det_sw_put()
550 (struct soc_mixer_control *) kcontrol->private_value; in da7218_mic_lvl_det_sw_get()
551 unsigned int lshift = mixer_ctrl->shift; in da7218_mic_lvl_det_sw_get()
552 unsigned int rshift = mixer_ctrl->rshift; in da7218_mic_lvl_det_sw_get()
553 unsigned int lmask = (mixer_ctrl->max << lshift); in da7218_mic_lvl_det_sw_get()
554 unsigned int rmask = (mixer_ctrl->max << rshift); in da7218_mic_lvl_det_sw_get()
556 ucontrol->value.integer.value[0] = in da7218_mic_lvl_det_sw_get()
557 (da7218->mic_lvl_det_en & lmask) >> lshift; in da7218_mic_lvl_det_sw_get()
558 ucontrol->value.integer.value[1] = in da7218_mic_lvl_det_sw_get()
559 (da7218->mic_lvl_det_en & rmask) >> rshift; in da7218_mic_lvl_det_sw_get()
570 (struct soc_bytes_ext *) kcontrol->private_value; in da7218_biquad_coeff_get()
573 switch (bytes_ext->max) { in da7218_biquad_coeff_get()
575 memcpy(ucontrol->value.bytes.data, da7218->biq_5stage_coeff, in da7218_biquad_coeff_get()
576 bytes_ext->max); in da7218_biquad_coeff_get()
579 memcpy(ucontrol->value.bytes.data, da7218->stbiq_3stage_coeff, in da7218_biquad_coeff_get()
580 bytes_ext->max); in da7218_biquad_coeff_get()
583 return -EINVAL; in da7218_biquad_coeff_get()
595 (struct soc_bytes_ext *) kcontrol->private_value; in da7218_biquad_coeff_put()
604 switch (bytes_ext->max) { in da7218_biquad_coeff_put()
607 memcpy(da7218->biq_5stage_coeff, ucontrol->value.bytes.data, in da7218_biquad_coeff_put()
608 bytes_ext->max); in da7218_biquad_coeff_put()
612 memcpy(da7218->stbiq_3stage_coeff, ucontrol->value.bytes.data, in da7218_biquad_coeff_put()
613 bytes_ext->max); in da7218_biquad_coeff_put()
616 return -EINVAL; in da7218_biquad_coeff_put()
624 for (i = 0; i < bytes_ext->max; ++i) { in da7218_biquad_coeff_put()
625 cfg[DA7218_BIQ_CFG_DATA] = ucontrol->value.bytes.data[i]; in da7218_biquad_coeff_put()
627 regmap_raw_write(da7218->regmap, reg, cfg, DA7218_BIQ_CFG_SIZE); in da7218_biquad_coeff_put()
665 SOC_SINGLE("Mixin1 Gain Ramp Switch", DA7218_MIXIN_1_CTRL,
668 SOC_SINGLE("Mixin1 ZC Gain Switch", DA7218_MIXIN_1_CTRL,
679 SOC_SINGLE("Mixin2 Gain Ramp Switch", DA7218_MIXIN_2_CTRL,
682 SOC_SINGLE("Mixin2 ZC Gain Switch", DA7218_MIXIN_2_CTRL,
705 SOC_SINGLE("In Filter1L Gain Ramp Switch", DA7218_IN_1L_FILTER_CTRL,
715 SOC_SINGLE("In Filter1R Gain Ramp Switch",
725 SOC_SINGLE("In Filter2L Gain Ramp Switch", DA7218_IN_2L_FILTER_CTRL,
735 SOC_SINGLE("In Filter2R Gain Ramp Switch",
772 SOC_SINGLE_TLV("ALC Max Gain", DA7218_ALC_GAIN_LIMITS,
775 SOC_SINGLE_RANGE_TLV("ALC Min Analog Gain", DA7218_ALC_ANA_GAIN_LIMITS,
779 SOC_SINGLE_RANGE_TLV("ALC Max Analog Gain", DA7218_ALC_ANA_GAIN_LIMITS,
800 /* Input High-Pass Filters */
1079 /* Gain ramping */
1080 SOC_ENUM("Gain Ramp Rate", da7218_gain_ramp_rate),
1104 SOC_SINGLE("DGS Gain Subrange Switch", DA7218_DGS_GAIN_CTRL,
1107 SOC_SINGLE("DGS Gain Ramp Switch", DA7218_DGS_GAIN_CTRL,
1110 SOC_SINGLE("DGS Gain Steps", DA7218_DGS_GAIN_CTRL,
1117 /* Output High-Pass Filter */
1122 /* 5-Band Equaliser */
1160 SOC_DOUBLE_R("Out Filter Gain Subrange Switch",
1164 SOC_DOUBLE_R("Out Filter Gain Ramp Switch", DA7218_OUT_1L_FILTER_CTRL,
1207 SOC_DOUBLE_R("Headphone Gain Ramp Switch", DA7218_HP_L_CTRL,
1210 SOC_DOUBLE_R("Headphone ZC Gain Switch", DA7218_HP_L_CTRL,
1352 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7218_in_filter_event()
1356 switch (w->reg) { in da7218_in_filter_event()
1370 return -EINVAL; in da7218_in_filter_event()
1375 da7218->in_filt_en |= mask; in da7218_in_filter_event()
1381 if (mask & da7218->mic_lvl_det_en) in da7218_in_filter_event()
1385 da7218->in_filt_en &= ~mask; in da7218_in_filter_event()
1388 return -EINVAL; in da7218_in_filter_event()
1393 (da7218->in_filt_en & da7218->mic_lvl_det_en)); in da7218_in_filter_event()
1401 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7218_dai_event()
1409 if (da7218->master) in da7218_dai_event()
1437 dev_warn(component->dev, in da7218_dai_event()
1463 dev_warn(component->dev, "SRM failed to lock\n"); in da7218_dai_event()
1467 /* PC free-running */ in da7218_dai_event()
1470 if (da7218->master) in da7218_dai_event()
1477 return -EINVAL; in da7218_dai_event()
1484 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7218_cp_event()
1491 if (da7218->hp_single_supply) in da7218_cp_event()
1504 return -EINVAL; in da7218_cp_event()
1511 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7218_hp_pga_event()
1516 snd_soc_component_update_bits(component, w->reg, DA7218_HP_AMP_OE_MASK, in da7218_hp_pga_event()
1521 snd_soc_component_update_bits(component, w->reg, DA7218_HP_AMP_OE_MASK, 0); in da7218_hp_pga_event()
1524 return -EINVAL; in da7218_hp_pga_event()
1571 SND_SOC_DAPM_PGA("Mic1 PGA", DA7218_MIC_1_CTRL,
1574 SND_SOC_DAPM_PGA("Mic2 PGA", DA7218_MIC_2_CTRL,
1577 SND_SOC_DAPM_PGA("Mixin1 PGA", DA7218_MIXIN_1_CTRL,
1580 SND_SOC_DAPM_PGA("Mixin2 PGA", DA7218_MIXIN_2_CTRL,
1673 SND_SOC_DAPM_PGA("Mixout Left PGA", DA7218_MIXOUT_L_CTRL,
1676 SND_SOC_DAPM_PGA("Mixout Right PGA", DA7218_MIXOUT_R_CTRL,
1679 SND_SOC_DAPM_PGA_E("Headphone Left PGA", DA7218_HP_L_CTRL,
1683 SND_SOC_DAPM_PGA_E("Headphone Right PGA", DA7218_HP_R_CTRL,
1734 {"Mic1 PGA", NULL, "MIC1"},
1735 {"Mic2 PGA", NULL, "MIC2"},
1737 {"Mixin1 PGA", NULL, "Mixin1 Supply"},
1738 {"Mixin2 PGA", NULL, "Mixin2 Supply"},
1740 {"Mixin1 PGA", NULL, "Mic1 PGA"},
1741 {"Mixin2 PGA", NULL, "Mic2 PGA"},
1743 {"Mic1 Mux", "Analog", "Mixin1 PGA"},
1746 {"Mic2 Mux", "Analog", "Mixin2 PGA"},
1795 {"Mixout Left PGA", NULL, "Out FilterL"},
1796 {"Mixout Right PGA", NULL, "Out FilterR"},
1798 {"Headphone Left PGA", NULL, "Mixout Left PGA"},
1799 {"Headphone Right PGA", NULL, "Mixout Right PGA"},
1801 {"HPL", NULL, "Headphone Left PGA"},
1802 {"HPR", NULL, "Headphone Right PGA"},
1816 struct snd_soc_component *component = codec_dai->component; in da7218_set_dai_sysclk()
1820 if (da7218->mclk_rate == freq) in da7218_set_dai_sysclk()
1824 dev_err(codec_dai->dev, "Unsupported MCLK value %d\n", in da7218_set_dai_sysclk()
1826 return -EINVAL; in da7218_set_dai_sysclk()
1840 dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id); in da7218_set_dai_sysclk()
1841 return -EINVAL; in da7218_set_dai_sysclk()
1844 if (da7218->mclk) { in da7218_set_dai_sysclk()
1845 freq = clk_round_rate(da7218->mclk, freq); in da7218_set_dai_sysclk()
1846 ret = clk_set_rate(da7218->mclk, freq); in da7218_set_dai_sysclk()
1848 dev_err(codec_dai->dev, "Failed to set clock rate %d\n", in da7218_set_dai_sysclk()
1854 da7218->mclk_rate = freq; in da7218_set_dai_sysclk()
1862 struct snd_soc_component *component = codec_dai->component; in da7218_set_dai_pll()
1870 /* Verify 2MHz - 54MHz MCLK provided, and set input divider */ in da7218_set_dai_pll()
1871 if (da7218->mclk_rate < 2000000) { in da7218_set_dai_pll()
1872 dev_err(component->dev, "PLL input clock %d below valid range\n", in da7218_set_dai_pll()
1873 da7218->mclk_rate); in da7218_set_dai_pll()
1874 return -EINVAL; in da7218_set_dai_pll()
1875 } else if (da7218->mclk_rate <= 4500000) { in da7218_set_dai_pll()
1878 } else if (da7218->mclk_rate <= 9000000) { in da7218_set_dai_pll()
1881 } else if (da7218->mclk_rate <= 18000000) { in da7218_set_dai_pll()
1884 } else if (da7218->mclk_rate <= 36000000) { in da7218_set_dai_pll()
1887 } else if (da7218->mclk_rate <= 54000000) { in da7218_set_dai_pll()
1891 dev_err(component->dev, "PLL input clock %d above valid range\n", in da7218_set_dai_pll()
1892 da7218->mclk_rate); in da7218_set_dai_pll()
1893 return -EINVAL; in da7218_set_dai_pll()
1895 freq_ref = (da7218->mclk_rate / indiv); in da7218_set_dai_pll()
1913 dev_err(component->dev, "Invalid PLL config\n"); in da7218_set_dai_pll()
1914 return -EINVAL; in da7218_set_dai_pll()
1937 struct snd_soc_component *component = codec_dai->component; in da7218_set_dai_fmt()
1943 da7218->master = true; in da7218_set_dai_fmt()
1946 da7218->master = false; in da7218_set_dai_fmt()
1949 return -EINVAL; in da7218_set_dai_fmt()
1970 return -EINVAL; in da7218_set_dai_fmt()
1988 return -EINVAL; in da7218_set_dai_fmt()
1992 return -EINVAL; in da7218_set_dai_fmt()
2009 return -EINVAL; in da7218_set_dai_fmt()
2026 struct snd_soc_component *component = dai->component; in da7218_set_dai_tdm_slot()
2030 /* No channels enabled so disable TDM, revert to 64-bit frames */ in da7218_set_dai_tdm_slot()
2043 dev_err(component->dev, "Invalid number of slots, max = %d\n", in da7218_set_dai_tdm_slot()
2045 return -EINVAL; in da7218_set_dai_tdm_slot()
2050 dev_err(component->dev, "Invalid slot offset, max = %d\n", in da7218_set_dai_tdm_slot()
2052 return -EINVAL; in da7218_set_dai_tdm_slot()
2071 dev_err(component->dev, "Invalid frame size\n"); in da7218_set_dai_tdm_slot()
2072 return -EINVAL; in da7218_set_dai_tdm_slot()
2095 struct snd_soc_component *component = dai->component; in da7218_hw_params()
2113 return -EINVAL; in da7218_hw_params()
2118 dev_err(component->dev, in da7218_hw_params()
2121 return -EINVAL; in da7218_hw_params()
2160 return -EINVAL; in da7218_hw_params()
2185 .name = "da7218-hifi",
2215 if (da7218->dev_id == DA7217_DEV_ID) in da7218_hpldet()
2216 return -EINVAL; in da7218_hpldet()
2218 da7218->jack = jack; in da7218_hpldet()
2234 kobject_uevent_env(&component->dev->kobj, KOBJ_CHANGE, envp); in da7218_micldet_irq()
2250 snd_soc_jack_report(da7218->jack, report, SND_JACK_HEADPHONE); in da7218_hpldet_irq()
2297 return (uintptr_t)id->data; in da7218_of_get_id()
2299 return -EINVAL; in da7218_of_get_id()
2325 dev_warn(component->dev, "Invalid micbias level"); in da7218_of_micbias_lvl()
2340 dev_warn(component->dev, "Invalid mic input type selection"); in da7218_of_mic_amp_in_sel()
2353 dev_warn(component->dev, "Invalid DMIC data type selection"); in da7218_of_dmic_data_sel()
2366 dev_warn(component->dev, "Invalid DMIC sample phase"); in da7218_of_dmic_samplephase()
2380 dev_warn(component->dev, "Invalid DMIC clock rate"); in da7218_of_dmic_clkrate()
2406 dev_warn(component->dev, "Invalid jack detect rate"); in da7218_of_jack_rate()
2424 dev_warn(component->dev, "Invalid jack debounce"); in da7218_of_jack_debounce()
2442 dev_warn(component->dev, "Invalid jack threshold level"); in da7218_of_jack_thr()
2450 struct device_node *np = component->dev->of_node; in da7218_of_to_pdata()
2457 pdata = devm_kzalloc(component->dev, sizeof(*pdata), GFP_KERNEL); in da7218_of_to_pdata()
2461 if (of_property_read_u32(np, "dlg,micbias1-lvl-millivolt", &of_val32) >= 0) in da7218_of_to_pdata()
2462 pdata->micbias1_lvl = da7218_of_micbias_lvl(component, of_val32); in da7218_of_to_pdata()
2464 pdata->micbias1_lvl = DA7218_MICBIAS_1_6V; in da7218_of_to_pdata()
2466 if (of_property_read_u32(np, "dlg,micbias2-lvl-millivolt", &of_val32) >= 0) in da7218_of_to_pdata()
2467 pdata->micbias2_lvl = da7218_of_micbias_lvl(component, of_val32); in da7218_of_to_pdata()
2469 pdata->micbias2_lvl = DA7218_MICBIAS_1_6V; in da7218_of_to_pdata()
2471 if (!of_property_read_string(np, "dlg,mic1-amp-in-sel", &of_str)) in da7218_of_to_pdata()
2472 pdata->mic1_amp_in_sel = in da7218_of_to_pdata()
2475 pdata->mic1_amp_in_sel = DA7218_MIC_AMP_IN_SEL_DIFF; in da7218_of_to_pdata()
2477 if (!of_property_read_string(np, "dlg,mic2-amp-in-sel", &of_str)) in da7218_of_to_pdata()
2478 pdata->mic2_amp_in_sel = in da7218_of_to_pdata()
2481 pdata->mic2_amp_in_sel = DA7218_MIC_AMP_IN_SEL_DIFF; in da7218_of_to_pdata()
2483 if (!of_property_read_string(np, "dlg,dmic1-data-sel", &of_str)) in da7218_of_to_pdata()
2484 pdata->dmic1_data_sel = da7218_of_dmic_data_sel(component, of_str); in da7218_of_to_pdata()
2486 pdata->dmic1_data_sel = DA7218_DMIC_DATA_LRISE_RFALL; in da7218_of_to_pdata()
2488 if (!of_property_read_string(np, "dlg,dmic1-samplephase", &of_str)) in da7218_of_to_pdata()
2489 pdata->dmic1_samplephase = in da7218_of_to_pdata()
2492 pdata->dmic1_samplephase = DA7218_DMIC_SAMPLE_ON_CLKEDGE; in da7218_of_to_pdata()
2494 if (of_property_read_u32(np, "dlg,dmic1-clkrate-hz", &of_val32) >= 0) in da7218_of_to_pdata()
2495 pdata->dmic1_clk_rate = da7218_of_dmic_clkrate(component, of_val32); in da7218_of_to_pdata()
2497 pdata->dmic1_clk_rate = DA7218_DMIC_CLK_3_0MHZ; in da7218_of_to_pdata()
2499 if (!of_property_read_string(np, "dlg,dmic2-data-sel", &of_str)) in da7218_of_to_pdata()
2500 pdata->dmic2_data_sel = da7218_of_dmic_data_sel(component, of_str); in da7218_of_to_pdata()
2502 pdata->dmic2_data_sel = DA7218_DMIC_DATA_LRISE_RFALL; in da7218_of_to_pdata()
2504 if (!of_property_read_string(np, "dlg,dmic2-samplephase", &of_str)) in da7218_of_to_pdata()
2505 pdata->dmic2_samplephase = in da7218_of_to_pdata()
2508 pdata->dmic2_samplephase = DA7218_DMIC_SAMPLE_ON_CLKEDGE; in da7218_of_to_pdata()
2510 if (of_property_read_u32(np, "dlg,dmic2-clkrate-hz", &of_val32) >= 0) in da7218_of_to_pdata()
2511 pdata->dmic2_clk_rate = da7218_of_dmic_clkrate(component, of_val32); in da7218_of_to_pdata()
2513 pdata->dmic2_clk_rate = DA7218_DMIC_CLK_3_0MHZ; in da7218_of_to_pdata()
2515 if (da7218->dev_id == DA7217_DEV_ID) { in da7218_of_to_pdata()
2516 if (of_property_read_bool(np, "dlg,hp-diff-single-supply")) in da7218_of_to_pdata()
2517 pdata->hp_diff_single_supply = true; in da7218_of_to_pdata()
2520 if (da7218->dev_id == DA7218_DEV_ID) { in da7218_of_to_pdata()
2525 hpldet_pdata = devm_kzalloc(component->dev, sizeof(*hpldet_pdata), in da7218_of_to_pdata()
2531 pdata->hpldet_pdata = hpldet_pdata; in da7218_of_to_pdata()
2533 if (of_property_read_u32(hpldet_np, "dlg,jack-rate-us", in da7218_of_to_pdata()
2535 hpldet_pdata->jack_rate = in da7218_of_to_pdata()
2538 hpldet_pdata->jack_rate = DA7218_HPLDET_JACK_RATE_40US; in da7218_of_to_pdata()
2540 if (of_property_read_u32(hpldet_np, "dlg,jack-debounce", in da7218_of_to_pdata()
2542 hpldet_pdata->jack_debounce = in da7218_of_to_pdata()
2545 hpldet_pdata->jack_debounce = in da7218_of_to_pdata()
2548 if (of_property_read_u32(hpldet_np, "dlg,jack-threshold-pct", in da7218_of_to_pdata()
2550 hpldet_pdata->jack_thr = in da7218_of_to_pdata()
2553 hpldet_pdata->jack_thr = DA7218_HPLDET_JACK_THR_84PCT; in da7218_of_to_pdata()
2555 if (of_property_read_bool(hpldet_np, "dlg,comp-inv")) in da7218_of_to_pdata()
2556 hpldet_pdata->comp_inv = true; in da7218_of_to_pdata()
2559 hpldet_pdata->hyst = true; in da7218_of_to_pdata()
2562 hpldet_pdata->discharge = true; in da7218_of_to_pdata()
2587 if (da7218->mclk) { in da7218_set_bias_level()
2588 ret = clk_prepare_enable(da7218->mclk); in da7218_set_bias_level()
2590 dev_err(component->dev, "Failed to enable mclk\n"); in da7218_set_bias_level()
2610 if (da7218->mclk) in da7218_set_bias_level()
2611 clk_disable_unprepare(da7218->mclk); in da7218_set_bias_level()
2616 if (!da7218->jack) { in da7218_set_bias_level()
2646 da7218->supplies[i].supply = da7218_supply_names[i]; in da7218_handle_supplies()
2648 ret = devm_regulator_bulk_get(component->dev, DA7218_NUM_SUPPLIES, in da7218_handle_supplies()
2649 da7218->supplies); in da7218_handle_supplies()
2651 dev_err(component->dev, "Failed to get supplies\n"); in da7218_handle_supplies()
2656 vddio = da7218->supplies[DA7218_SUPPLY_VDDIO].consumer; in da7218_handle_supplies()
2659 dev_warn(component->dev, "Invalid VDDIO voltage\n"); in da7218_handle_supplies()
2664 ret = regulator_bulk_enable(DA7218_NUM_SUPPLIES, da7218->supplies); in da7218_handle_supplies()
2666 dev_err(component->dev, "Failed to enable supplies\n"); in da7218_handle_supplies()
2682 struct da7218_pdata *pdata = da7218->pdata; in da7218_handle_pdata()
2688 switch (pdata->micbias1_lvl) { in da7218_handle_pdata()
2700 micbias_lvl |= (pdata->micbias1_lvl << in da7218_handle_pdata()
2705 switch (pdata->micbias2_lvl) { in da7218_handle_pdata()
2717 micbias_lvl |= (pdata->micbias2_lvl << in da7218_handle_pdata()
2725 switch (pdata->mic1_amp_in_sel) { in da7218_handle_pdata()
2730 pdata->mic1_amp_in_sel); in da7218_handle_pdata()
2734 switch (pdata->mic2_amp_in_sel) { in da7218_handle_pdata()
2739 pdata->mic2_amp_in_sel); in da7218_handle_pdata()
2744 switch (pdata->dmic1_data_sel) { in da7218_handle_pdata()
2747 dmic_cfg |= (pdata->dmic1_data_sel << in da7218_handle_pdata()
2752 switch (pdata->dmic1_samplephase) { in da7218_handle_pdata()
2755 dmic_cfg |= (pdata->dmic1_samplephase << in da7218_handle_pdata()
2760 switch (pdata->dmic1_clk_rate) { in da7218_handle_pdata()
2763 dmic_cfg |= (pdata->dmic1_clk_rate << in da7218_handle_pdata()
2774 switch (pdata->dmic2_data_sel) { in da7218_handle_pdata()
2777 dmic_cfg |= (pdata->dmic2_data_sel << in da7218_handle_pdata()
2782 switch (pdata->dmic2_samplephase) { in da7218_handle_pdata()
2785 dmic_cfg |= (pdata->dmic2_samplephase << in da7218_handle_pdata()
2790 switch (pdata->dmic2_clk_rate) { in da7218_handle_pdata()
2793 dmic_cfg |= (pdata->dmic2_clk_rate << in da7218_handle_pdata()
2804 if (da7218->dev_id == DA7217_DEV_ID) { in da7218_handle_pdata()
2805 da7218->hp_single_supply = in da7218_handle_pdata()
2806 pdata->hp_diff_single_supply; in da7218_handle_pdata()
2808 if (da7218->hp_single_supply) { in da7218_handle_pdata()
2818 if ((da7218->dev_id == DA7218_DEV_ID) && in da7218_handle_pdata()
2819 (pdata->hpldet_pdata)) { in da7218_handle_pdata()
2821 pdata->hpldet_pdata; in da7218_handle_pdata()
2824 switch (hpldet_pdata->jack_rate) { in da7218_handle_pdata()
2834 (hpldet_pdata->jack_rate << in da7218_handle_pdata()
2839 switch (hpldet_pdata->jack_debounce) { in da7218_handle_pdata()
2845 (hpldet_pdata->jack_debounce << in da7218_handle_pdata()
2850 switch (hpldet_pdata->jack_thr) { in da7218_handle_pdata()
2856 (hpldet_pdata->jack_thr << in da7218_handle_pdata()
2867 if (hpldet_pdata->comp_inv) in da7218_handle_pdata()
2870 if (hpldet_pdata->hyst) in da7218_handle_pdata()
2873 if (hpldet_pdata->discharge) in da7218_handle_pdata()
2892 if (component->dev->of_node) in da7218_probe()
2893 da7218->pdata = da7218_of_to_pdata(component); in da7218_probe()
2895 da7218->pdata = dev_get_platdata(component->dev); in da7218_probe()
2900 da7218->mclk = devm_clk_get(component->dev, "mclk"); in da7218_probe()
2901 if (IS_ERR(da7218->mclk)) { in da7218_probe()
2902 if (PTR_ERR(da7218->mclk) != -ENOENT) { in da7218_probe()
2903 ret = PTR_ERR(da7218->mclk); in da7218_probe()
2906 da7218->mclk = NULL; in da7218_probe()
2910 /* Default PC to free-running */ in da7218_probe()
2924 /* Default gain ramping */ in da7218_probe()
2962 if (da7218->dev_id == DA7217_DEV_ID) { in da7218_probe()
2972 if (da7218->irq) { in da7218_probe()
2973 ret = devm_request_threaded_irq(component->dev, da7218->irq, NULL, in da7218_probe()
2978 dev_err(component->dev, "Failed to request IRQ %d: %d\n", in da7218_probe()
2979 da7218->irq, ret); in da7218_probe()
2988 regulator_bulk_disable(DA7218_NUM_SUPPLIES, da7218->supplies); in da7218_probe()
2997 regulator_bulk_disable(DA7218_NUM_SUPPLIES, da7218->supplies); in da7218_remove()
3008 if (!da7218->jack) in da7218_suspend()
3019 if (!da7218->jack) in da7218_resume()
3271 da7218 = devm_kzalloc(&i2c->dev, sizeof(*da7218), GFP_KERNEL); in da7218_i2c_probe()
3273 return -ENOMEM; in da7218_i2c_probe()
3277 if (i2c->dev.of_node) in da7218_i2c_probe()
3278 da7218->dev_id = da7218_of_get_id(&i2c->dev); in da7218_i2c_probe()
3280 da7218->dev_id = id->driver_data; in da7218_i2c_probe()
3282 if ((da7218->dev_id != DA7217_DEV_ID) && in da7218_i2c_probe()
3283 (da7218->dev_id != DA7218_DEV_ID)) { in da7218_i2c_probe()
3284 dev_err(&i2c->dev, "Invalid device Id\n"); in da7218_i2c_probe()
3285 return -EINVAL; in da7218_i2c_probe()
3288 da7218->irq = i2c->irq; in da7218_i2c_probe()
3290 da7218->regmap = devm_regmap_init_i2c(i2c, &da7218_regmap_config); in da7218_i2c_probe()
3291 if (IS_ERR(da7218->regmap)) { in da7218_i2c_probe()
3292 ret = PTR_ERR(da7218->regmap); in da7218_i2c_probe()
3293 dev_err(&i2c->dev, "regmap_init() failed: %d\n", ret); in da7218_i2c_probe()
3297 ret = devm_snd_soc_register_component(&i2c->dev, in da7218_i2c_probe()
3300 dev_err(&i2c->dev, "Failed to register da7218 component: %d\n", in da7218_i2c_probe()