• Home
  • Raw
  • Download

Lines Matching +full:out +full:- +full:mono

2  * rt5640.c  --  RT5640/RT5639 ALSA SoC audio codec driver
31 #include <sound/soc-dapm.h>
344 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
345 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
346 static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
347 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
396 SOC_DOUBLE("OUT Playback Switch", RT5640_OUTPUT,
398 SOC_DOUBLE("OUT Channel Switch", RT5640_OUTPUT,
400 SOC_DOUBLE_TLV("OUT Playback Volume", RT5640_OUTPUT,
427 SOC_DOUBLE("Mono ADC Capture Switch", RT5640_DUMMY1,
429 SOC_DOUBLE_TLV("Mono ADC Capture Volume", RT5640_ADC_DATA,
446 /* MONO Output Control */
447 SOC_SINGLE("Mono Playback Switch", RT5640_MONO_OUT, RT5640_L_MUTE_SFT,
450 SOC_DOUBLE_TLV("Mono DAC Playback Volume", RT5640_DAC2_DIG_VOL,
455 * set_dmic_clk - Set parameter of dmic.
465 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
469 rate = rt5640->sysclk / rl6231_get_pre_div(rt5640->regmap, in set_dmic_clk()
473 dev_err(component->dev, "Failed to set DMIC clock\n"); in set_dmic_clk()
483 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in is_using_asrc()
486 if (!rt5640->asrc_en) in is_using_asrc()
611 SOC_DAPM_SINGLE("OUT MIXL Switch", RT5640_REC_L2_MIXER,
626 SOC_DAPM_SINGLE("OUT MIXR Switch", RT5640_REC_R2_MIXER,
640 SOC_DAPM_SINGLE("OUT MIXL Switch", RT5640_SPK_L_MIXER,
653 SOC_DAPM_SINGLE("OUT MIXR Switch", RT5640_SPK_R_MIXER,
816 /* Mono ADC source */
818 "Mono DAC MIXL", "ADCL"
825 SOC_DAPM_ENUM("Mono ADC1 left source", rt5640_mono_adc_l1_enum);
828 "DMIC L1", "DMIC L2", "Mono DAC MIXL"
835 SOC_DAPM_ENUM("Mono ADC2 left source", rt5640_mono_adc_l2_enum);
838 "Mono DAC MIXR", "ADCR"
845 SOC_DAPM_ENUM("Mono ADC1 right source", rt5640_mono_adc_r1_enum);
848 "DMIC R1", "DMIC R2", "Mono DAC MIXR"
855 SOC_DAPM_ENUM("Mono ADC2 right source", rt5640_mono_adc_r2_enum);
925 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE + in hp_amp_power_on()
927 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2, in hp_amp_power_on()
929 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1, in hp_amp_power_on()
932 regmap_write(rt5640->regmap, RT5640_PR_BASE + RT5640_HP_DCC_INT1, in hp_amp_power_on()
935 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1, in hp_amp_power_on()
937 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1, in hp_amp_power_on()
941 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1, in hp_amp_power_on()
950 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2, in rt5640_pmu_depop()
953 regmap_update_bits(rt5640->regmap, RT5640_CHARGE_PUMP, in rt5640_pmu_depop()
956 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M3, in rt5640_pmu_depop()
962 regmap_write(rt5640->regmap, RT5640_PR_BASE + in rt5640_pmu_depop()
964 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1, in rt5640_pmu_depop()
967 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE + in rt5640_pmu_depop()
974 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5640_hp_event()
980 rt5640->hp_mute = 0; in rt5640_hp_event()
984 rt5640->hp_mute = 1; in rt5640_hp_event()
998 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5640_lout_event()
1027 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5640_hp_power_event()
1043 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5640_hp_post_event()
1048 if (!rt5640->hp_mute) in rt5640_hp_post_event()
1131 SND_SOC_DAPM_MUX("Mono ADC L2 Mux", SND_SOC_NOPM, 0, 0,
1133 SND_SOC_DAPM_MUX("Mono ADC L1 Mux", SND_SOC_NOPM, 0, 0,
1135 SND_SOC_DAPM_MUX("Mono ADC R1 Mux", SND_SOC_NOPM, 0, 0,
1137 SND_SOC_DAPM_MUX("Mono ADC R2 Mux", SND_SOC_NOPM, 0, 0,
1146 SND_SOC_DAPM_SUPPLY("Mono Left Filter", RT5640_PWR_DIG2,
1148 SND_SOC_DAPM_MIXER("Mono ADC MIXL", SND_SOC_NOPM, 0, 0,
1150 SND_SOC_DAPM_SUPPLY("Mono Right Filter", RT5640_PWR_DIG2,
1152 SND_SOC_DAPM_MIXER("Mono ADC MIXR", SND_SOC_NOPM, 0, 0,
1197 SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0,
1199 SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0,
1218 /* SPK/OUT Mixer */
1236 /* SPO/HPO/LOUT/Mono Mixer */
1299 SND_SOC_DAPM_MIXER("OUT MIXL", RT5640_PWR_MIXER, RT5640_PWR_OM_L_BIT,
1301 SND_SOC_DAPM_MIXER("OUT MIXR", RT5640_PWR_MIXER, RT5640_PWR_OM_R_BIT,
1309 SND_SOC_DAPM_MIXER("Mono MIX", RT5640_PWR_ANLG1, RT5640_PWR_MM_BIT, 0,
1311 SND_SOC_DAPM_SUPPLY("Improve MONO Amp Drv", RT5640_PWR_ANLG1,
1324 SND_SOC_DAPM_MIXER("OUT MIXL", RT5640_PWR_MIXER, RT5640_PWR_OM_L_BIT,
1326 SND_SOC_DAPM_MIXER("OUT MIXR", RT5640_PWR_MIXER, RT5640_PWR_OM_R_BIT,
1366 {"RECMIXL", "OUT MIXL Switch", "OUT MIXL"},
1373 {"RECMIXR", "OUT MIXR Switch", "OUT MIXR"},
1399 {"Mono ADC L2 Mux", "DMIC L1", "DMIC L1"},
1400 {"Mono ADC L2 Mux", "DMIC L2", "DMIC L2"},
1401 {"Mono ADC L2 Mux", "Mono DAC MIXL", "Mono DAC MIXL"},
1402 {"Mono ADC L1 Mux", "Mono DAC MIXL", "Mono DAC MIXL"},
1403 {"Mono ADC L1 Mux", "ADCL", "ADC L"},
1405 {"Mono ADC R1 Mux", "Mono DAC MIXR", "Mono DAC MIXR"},
1406 {"Mono ADC R1 Mux", "ADCR", "ADC R"},
1407 {"Mono ADC R2 Mux", "DMIC R1", "DMIC R1"},
1408 {"Mono ADC R2 Mux", "DMIC R2", "DMIC R2"},
1409 {"Mono ADC R2 Mux", "Mono DAC MIXR", "Mono DAC MIXR"},
1419 {"Mono ADC MIXL", "ADC1 Switch", "Mono ADC L1 Mux"},
1420 {"Mono ADC MIXL", "ADC2 Switch", "Mono ADC L2 Mux"},
1421 {"Mono ADC MIXL", NULL, "Mono Left Filter"},
1423 {"Mono ADC MIXR", "ADC1 Switch", "Mono ADC R1 Mux"},
1424 {"Mono ADC MIXR", "ADC2 Switch", "Mono ADC R2 Mux"},
1425 {"Mono ADC MIXR", NULL, "Mono Right Filter"},
1427 {"IF2 ADC L", NULL, "Mono ADC MIXL"},
1428 {"IF2 ADC R", NULL, "Mono ADC MIXR"},
1488 {"Mono DAC MIXL", "DAC L1 Switch", "DAC MIXL"},
1489 {"Mono DAC MIXR", "DAC R1 Switch", "DAC MIXR"},
1502 {"SPK MIXL", "OUT MIXL Switch", "OUT MIXL"},
1506 {"SPK MIXR", "OUT MIXR Switch", "OUT MIXR"},
1508 {"OUT MIXL", "BST1 Switch", "BST1"},
1509 {"OUT MIXL", "INL Switch", "INL VOL"},
1510 {"OUT MIXL", "REC MIXL Switch", "RECMIXL"},
1511 {"OUT MIXL", "DAC L1 Switch", "DAC L1"},
1513 {"OUT MIXR", "BST2 Switch", "BST2"},
1514 {"OUT MIXR", "BST1 Switch", "BST1"},
1515 {"OUT MIXR", "INR Switch", "INR VOL"},
1516 {"OUT MIXR", "REC MIXR Switch", "RECMIXR"},
1517 {"OUT MIXR", "DAC R1 Switch", "DAC R1"},
1521 {"HPOVOL L", NULL, "OUT MIXL"},
1522 {"HPOVOL R", NULL, "OUT MIXR"},
1523 {"OUTVOL L", NULL, "OUT MIXL"},
1524 {"OUTVOL R", NULL, "OUT MIXR"},
1593 {"Mono DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"},
1594 {"Mono DAC MIXL", "DAC R2 Switch", "DAC R2 Mux"},
1596 {"Mono DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"},
1597 {"Mono DAC MIXR", "DAC L2 Switch", "DAC L2 Mux"},
1602 {"DAC L2", NULL, "Mono DAC MIXL"},
1604 {"DAC R2", NULL, "Mono DAC MIXR"},
1610 {"OUT MIXL", "SPK MIXL Switch", "SPK MIXL"},
1611 {"OUT MIXR", "SPK MIXR Switch", "SPK MIXR"},
1613 {"OUT MIXL", "DAC R2 Switch", "DAC R2"},
1614 {"OUT MIXL", "DAC L2 Switch", "DAC L2"},
1616 {"OUT MIXR", "DAC L2 Switch", "DAC L2"},
1617 {"OUT MIXR", "DAC R2 Switch", "DAC R2"},
1622 {"Mono MIX", "DAC R2 Switch", "DAC R2"},
1623 {"Mono MIX", "DAC L2 Switch", "DAC L2"},
1624 {"Mono MIX", "OUTVOL R Switch", "OUTVOL R"},
1625 {"Mono MIX", "OUTVOL L Switch", "OUTVOL L"},
1626 {"Mono MIX", "BST1 Switch", "BST1"},
1628 {"MONOP", NULL, "Mono MIX"},
1629 {"MONON", NULL, "Mono MIX"},
1630 {"MONOP", NULL, "Improve MONO Amp Drv"},
1637 {"Mono DAC MIXL", "DAC L2 Switch", "IF2 DAC L"},
1638 {"Mono DAC MIXL", "DAC R2 Switch", "IF2 DAC R"},
1640 {"Mono DAC MIXR", "DAC R2 Switch", "IF2 DAC R"},
1641 {"Mono DAC MIXR", "DAC L2 Switch", "IF2 DAC L"},
1655 return -EINVAL; in get_sdp_info()
1693 ret = -EINVAL; in get_sdp_info()
1703 struct snd_soc_component *component = dai->component; in rt5640_hw_params()
1708 rt5640->lrck[dai->id] = params_rate(params); in rt5640_hw_params()
1709 pre_div = rl6231_get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]); in rt5640_hw_params()
1711 dev_err(component->dev, "Unsupported clock setting %d for DAI %d\n", in rt5640_hw_params()
1712 rt5640->lrck[dai->id], dai->id); in rt5640_hw_params()
1713 return -EINVAL; in rt5640_hw_params()
1717 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size); in rt5640_hw_params()
1724 rt5640->bclk[dai->id] = rt5640->lrck[dai->id] * (32 << bclk_ms); in rt5640_hw_params()
1726 dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n", in rt5640_hw_params()
1727 rt5640->bclk[dai->id], rt5640->lrck[dai->id]); in rt5640_hw_params()
1728 dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n", in rt5640_hw_params()
1729 bclk_ms, pre_div, dai->id); in rt5640_hw_params()
1744 return -EINVAL; in rt5640_hw_params()
1747 dai_sel = get_sdp_info(component, dai->id); in rt5640_hw_params()
1749 dev_err(component->dev, "Failed to get sdp info: %d\n", dai_sel); in rt5640_hw_params()
1750 return -EINVAL; in rt5640_hw_params()
1774 struct snd_soc_component *component = dai->component; in rt5640_set_dai_fmt()
1781 rt5640->master[dai->id] = 1; in rt5640_set_dai_fmt()
1785 rt5640->master[dai->id] = 0; in rt5640_set_dai_fmt()
1788 return -EINVAL; in rt5640_set_dai_fmt()
1798 return -EINVAL; in rt5640_set_dai_fmt()
1814 return -EINVAL; in rt5640_set_dai_fmt()
1817 dai_sel = get_sdp_info(component, dai->id); in rt5640_set_dai_fmt()
1819 dev_err(component->dev, "Failed to get sdp info: %d\n", dai_sel); in rt5640_set_dai_fmt()
1820 return -EINVAL; in rt5640_set_dai_fmt()
1839 struct snd_soc_component *component = dai->component; in rt5640_set_dai_sysclk()
1844 if (freq == rt5640->sysclk && clk_id == rt5640->sysclk_src) in rt5640_set_dai_sysclk()
1859 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5640_set_dai_sysclk()
1860 return -EINVAL; in rt5640_set_dai_sysclk()
1866 rt5640->sysclk = freq; in rt5640_set_dai_sysclk()
1867 rt5640->sysclk_src = clk_id; in rt5640_set_dai_sysclk()
1869 dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); in rt5640_set_dai_sysclk()
1876 struct snd_soc_component *component = dai->component; in rt5640_set_dai_pll()
1881 if (source == rt5640->pll_src && freq_in == rt5640->pll_in && in rt5640_set_dai_pll()
1882 freq_out == rt5640->pll_out) in rt5640_set_dai_pll()
1886 dev_dbg(component->dev, "PLL disabled\n"); in rt5640_set_dai_pll()
1888 rt5640->pll_in = 0; in rt5640_set_dai_pll()
1889 rt5640->pll_out = 0; in rt5640_set_dai_pll()
1909 dev_err(component->dev, "Unknown PLL source %d\n", source); in rt5640_set_dai_pll()
1910 return -EINVAL; in rt5640_set_dai_pll()
1915 dev_err(component->dev, "Unsupport input clock %d\n", freq_in); in rt5640_set_dai_pll()
1919 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n", in rt5640_set_dai_pll()
1929 rt5640->pll_in = freq_in; in rt5640_set_dai_pll()
1930 rt5640->pll_out = freq_out; in rt5640_set_dai_pll()
1931 rt5640->pll_src = source; in rt5640_set_dai_pll()
1954 if (IS_ERR(rt5640->mclk)) in rt5640_set_bias_level()
1958 clk_disable_unprepare(rt5640->mclk); in rt5640_set_bias_level()
1960 ret = clk_prepare_enable(rt5640->mclk); in rt5640_set_bias_level()
2008 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1, in rt5640_dmic_enable()
2012 regmap_update_bits(rt5640->regmap, RT5640_DMIC, in rt5640_dmic_enable()
2014 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1, in rt5640_dmic_enable()
2019 regmap_update_bits(rt5640->regmap, RT5640_DMIC, in rt5640_dmic_enable()
2021 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1, in rt5640_dmic_enable()
2042 return -EINVAL; in rt5640_sel_asrc_clk_src()
2046 return -EINVAL; in rt5640_sel_asrc_clk_src()
2088 rt5640->asrc_en = true; in rt5640_sel_asrc_clk_src()
2091 rt5640->asrc_en = false; in rt5640_sel_asrc_clk_src()
2106 /* OVCD is unreliable when used with RCCLK as sysclk-source */ in rt5640_enable_micbias1_for_ovcd()
2130 rt5640->ovcd_irq_enabled = true; in rt5640_enable_micbias1_ovcd_irq()
2139 rt5640->ovcd_irq_enabled = false; in rt5640_disable_micbias1_ovcd_irq()
2153 dev_dbg(component->dev, "irq ctrl2 %#04x\n", val); in rt5640_micbias1_ovcd()
2164 dev_dbg(component->dev, "irq status %#04x\n", val); in rt5640_jack_inserted()
2166 if (rt5640->jd_inverted) in rt5640_jack_inserted()
2172 /* Jack detect and button-press timings */
2185 rt5640->poll_count = 0; in rt5640_start_button_press_work()
2186 rt5640->press_count = 0; in rt5640_start_button_press_work()
2187 rt5640->release_count = 0; in rt5640_start_button_press_work()
2188 rt5640->pressed = false; in rt5640_start_button_press_work()
2189 rt5640->press_reported = false; in rt5640_start_button_press_work()
2191 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME)); in rt5640_start_button_press_work()
2198 struct snd_soc_component *component = rt5640->component; in rt5640_button_press_work()
2205 rt5640->release_count = 0; in rt5640_button_press_work()
2206 rt5640->press_count++; in rt5640_button_press_work()
2208 if (rt5640->press_count >= BP_THRESHOLD) in rt5640_button_press_work()
2209 rt5640->pressed = true; in rt5640_button_press_work()
2212 rt5640->press_count = 0; in rt5640_button_press_work()
2213 rt5640->release_count++; in rt5640_button_press_work()
2218 * at least JACK_UNPLUG_TIME milli-seconds before reporting a press. in rt5640_button_press_work()
2220 rt5640->poll_count++; in rt5640_button_press_work()
2221 if (rt5640->poll_count < (JACK_UNPLUG_TIME / BP_POLL_TIME)) { in rt5640_button_press_work()
2222 schedule_delayed_work(&rt5640->bp_work, in rt5640_button_press_work()
2227 if (rt5640->pressed && !rt5640->press_reported) { in rt5640_button_press_work()
2228 dev_dbg(component->dev, "headset button press\n"); in rt5640_button_press_work()
2229 snd_soc_jack_report(rt5640->jack, SND_JACK_BTN_0, in rt5640_button_press_work()
2231 rt5640->press_reported = true; in rt5640_button_press_work()
2234 if (rt5640->release_count >= BP_THRESHOLD) { in rt5640_button_press_work()
2235 if (rt5640->press_reported) { in rt5640_button_press_work()
2236 dev_dbg(component->dev, "headset button release\n"); in rt5640_button_press_work()
2237 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0); in rt5640_button_press_work()
2239 /* Re-enable OVCD IRQ to detect next press */ in rt5640_button_press_work()
2244 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME)); in rt5640_button_press_work()
2259 /* Clear any previous over-current status flag */ in rt5640_detect_headset()
2274 dev_dbg(component->dev, "jack mic-gnd shorted\n"); in rt5640_detect_headset()
2280 dev_dbg(component->dev, "jack mic-gnd open\n"); in rt5640_detect_headset()
2288 …dev_err(component->dev, "Error detecting headset vs headphones, bad contact?, assuming headphones\… in rt5640_detect_headset()
2296 struct snd_soc_component *component = rt5640->component; in rt5640_jack_work()
2301 if (rt5640->jack->status & SND_JACK_HEADPHONE) { in rt5640_jack_work()
2302 if (rt5640->jack->status & SND_JACK_MICROPHONE) { in rt5640_jack_work()
2303 cancel_delayed_work_sync(&rt5640->bp_work); in rt5640_jack_work()
2307 snd_soc_jack_report(rt5640->jack, 0, in rt5640_jack_work()
2309 dev_dbg(component->dev, "jack unplugged\n"); in rt5640_jack_work()
2311 } else if (!(rt5640->jack->status & SND_JACK_HEADPHONE)) { in rt5640_jack_work()
2313 WARN_ON(rt5640->ovcd_irq_enabled); in rt5640_jack_work()
2323 dev_dbg(component->dev, "detect status %#02x\n", status); in rt5640_jack_work()
2324 snd_soc_jack_report(rt5640->jack, status, SND_JACK_HEADSET); in rt5640_jack_work()
2325 } else if (rt5640->ovcd_irq_enabled && rt5640_micbias1_ovcd(component)) { in rt5640_jack_work()
2326 dev_dbg(component->dev, "OVCD IRQ\n"); in rt5640_jack_work()
2341 * If the jack-detect IRQ flag goes high (unplug) after our in rt5640_jack_work()
2344 * we react to edges, we miss the unplug event -> recheck. in rt5640_jack_work()
2346 queue_work(system_long_wq, &rt5640->jack_work); in rt5640_jack_work()
2354 if (rt5640->jack) in rt5640_irq()
2355 queue_work(system_long_wq, &rt5640->jack_work); in rt5640_irq()
2364 cancel_work_sync(&rt5640->jack_work); in rt5640_cancel_work()
2365 cancel_delayed_work_sync(&rt5640->bp_work); in rt5640_cancel_work()
2373 /* Select JD-source */ in rt5640_enable_jack_detect()
2375 RT5640_JD_MASK, rt5640->jd_src); in rt5640_enable_jack_detect()
2392 0xa800 | rt5640->ovcd_sf); in rt5640_enable_jack_detect()
2396 rt5640->ovcd_th | RT5640_MIC1_OVCD_EN); in rt5640_enable_jack_detect()
2399 * The over-current-detect is only reliable in detecting the absence in rt5640_enable_jack_detect()
2400 * of over-current, when the mic-contact in the jack is short-circuited, in rt5640_enable_jack_detect()
2401 * the hardware periodically retries if it can apply the bias-current in rt5640_enable_jack_detect()
2402 * leading to the ovcd status flip-flopping 1-0-1 with it being 0 about in rt5640_enable_jack_detect()
2411 * All IRQs get or-ed together, so we need the jack IRQ to report 0 in rt5640_enable_jack_detect()
2416 if (rt5640->jd_inverted) in rt5640_enable_jack_detect()
2423 rt5640->jack = jack; in rt5640_enable_jack_detect()
2424 if (rt5640->jack->status & SND_JACK_MICROPHONE) { in rt5640_enable_jack_detect()
2429 enable_irq(rt5640->irq); in rt5640_enable_jack_detect()
2431 queue_work(system_long_wq, &rt5640->jack_work); in rt5640_enable_jack_detect()
2439 * soc_remove_component() force-disables jack and thus rt5640->jack in rt5640_disable_jack_detect()
2442 if (!rt5640->jack) in rt5640_disable_jack_detect()
2445 disable_irq(rt5640->irq); in rt5640_disable_jack_detect()
2448 if (rt5640->jack->status & SND_JACK_MICROPHONE) { in rt5640_disable_jack_detect()
2451 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0); in rt5640_disable_jack_detect()
2454 rt5640->jack = NULL; in rt5640_disable_jack_detect()
2478 rt5640->mclk = devm_clk_get(component->dev, "mclk"); in rt5640_probe()
2479 if (PTR_ERR(rt5640->mclk) == -EPROBE_DEFER) in rt5640_probe()
2480 return -EPROBE_DEFER; in rt5640_probe()
2482 rt5640->component = component; in rt5640_probe()
2512 dev_err(component->dev, in rt5640_probe()
2514 return -ENODEV; in rt5640_probe()
2518 * Note on some platforms the platform code may need to add device-props in rt5640_probe()
2521 * rt5640_i2c_probe(), so that the platform-code can attach extra in rt5640_probe()
2524 if (device_property_read_bool(component->dev, "realtek,in1-differential")) in rt5640_probe()
2528 if (device_property_read_bool(component->dev, "realtek,in2-differential")) in rt5640_probe()
2532 if (device_property_read_bool(component->dev, "realtek,in3-differential")) in rt5640_probe()
2536 if (device_property_read_u32(component->dev, "realtek,dmic1-data-pin", in rt5640_probe()
2538 dmic1_data_pin = val - 1; in rt5640_probe()
2542 if (device_property_read_u32(component->dev, "realtek,dmic2-data-pin", in rt5640_probe()
2544 dmic2_data_pin = val - 1; in rt5640_probe()
2551 if (device_property_read_u32(component->dev, in rt5640_probe()
2552 "realtek,jack-detect-source", &val) == 0) { in rt5640_probe()
2554 rt5640->jd_src = val << RT5640_JD_SFT; in rt5640_probe()
2556 …dev_warn(component->dev, "Warning: Invalid jack-detect-source value: %d, leaving jack-detect disab… in rt5640_probe()
2560 if (!device_property_read_bool(component->dev, "realtek,jack-detect-not-inverted")) in rt5640_probe()
2561 rt5640->jd_inverted = true; in rt5640_probe()
2565 * threshold and scale-factor are 2000µA and 0.75. For an effective in rt5640_probe()
2568 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA; in rt5640_probe()
2569 rt5640->ovcd_sf = RT5640_MIC_OVCD_SF_0P75; in rt5640_probe()
2571 if (device_property_read_u32(component->dev, in rt5640_probe()
2572 "realtek,over-current-threshold-microamp", &val) == 0) { in rt5640_probe()
2575 rt5640->ovcd_th = RT5640_MIC1_OVTH_600UA; in rt5640_probe()
2578 rt5640->ovcd_th = RT5640_MIC1_OVTH_1500UA; in rt5640_probe()
2581 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA; in rt5640_probe()
2584 …dev_warn(component->dev, "Warning: Invalid over-current-threshold-microamp value: %d, defaulting t… in rt5640_probe()
2589 if (device_property_read_u32(component->dev, in rt5640_probe()
2590 "realtek,over-current-scale-factor", &val) == 0) { in rt5640_probe()
2592 rt5640->ovcd_sf = val << RT5640_MIC_OVCD_SF_SFT; in rt5640_probe()
2594 …dev_warn(component->dev, "Warning: Invalid over-current-scale-factor value: %d, defaulting to 0.75… in rt5640_probe()
2613 regcache_cache_only(rt5640->regmap, true); in rt5640_suspend()
2614 regcache_mark_dirty(rt5640->regmap); in rt5640_suspend()
2615 if (gpio_is_valid(rt5640->ldo1_en)) in rt5640_suspend()
2616 gpio_set_value_cansleep(rt5640->ldo1_en, 0); in rt5640_suspend()
2625 if (gpio_is_valid(rt5640->ldo1_en)) { in rt5640_resume()
2626 gpio_set_value_cansleep(rt5640->ldo1_en, 1); in rt5640_resume()
2630 regcache_cache_only(rt5640->regmap, false); in rt5640_resume()
2631 regcache_sync(rt5640->regmap); in rt5640_resume()
2653 .name = "rt5640-aif1",
2672 .name = "rt5640-aif2",
2759 rt5640->ldo1_en = of_get_named_gpio(np, "realtek,ldo1-en-gpios", 0); in rt5640_parse_dt()
2762 * -ENOENT means that the property doesn't exist, i.e. there is no in rt5640_parse_dt()
2766 if (!gpio_is_valid(rt5640->ldo1_en) && in rt5640_parse_dt()
2767 (rt5640->ldo1_en != -ENOENT)) in rt5640_parse_dt()
2768 return rt5640->ldo1_en; in rt5640_parse_dt()
2780 rt5640 = devm_kzalloc(&i2c->dev, in rt5640_i2c_probe()
2784 return -ENOMEM; in rt5640_i2c_probe()
2787 if (i2c->dev.of_node) { in rt5640_i2c_probe()
2788 ret = rt5640_parse_dt(rt5640, i2c->dev.of_node); in rt5640_i2c_probe()
2792 rt5640->ldo1_en = -EINVAL; in rt5640_i2c_probe()
2794 rt5640->regmap = devm_regmap_init_i2c(i2c, &rt5640_regmap); in rt5640_i2c_probe()
2795 if (IS_ERR(rt5640->regmap)) { in rt5640_i2c_probe()
2796 ret = PTR_ERR(rt5640->regmap); in rt5640_i2c_probe()
2797 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5640_i2c_probe()
2802 if (gpio_is_valid(rt5640->ldo1_en)) { in rt5640_i2c_probe()
2803 ret = devm_gpio_request_one(&i2c->dev, rt5640->ldo1_en, in rt5640_i2c_probe()
2807 dev_err(&i2c->dev, "Failed to request LDO1_EN %d: %d\n", in rt5640_i2c_probe()
2808 rt5640->ldo1_en, ret); in rt5640_i2c_probe()
2814 regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val); in rt5640_i2c_probe()
2816 dev_err(&i2c->dev, in rt5640_i2c_probe()
2818 return -ENODEV; in rt5640_i2c_probe()
2821 regmap_write(rt5640->regmap, RT5640_RESET, 0); in rt5640_i2c_probe()
2823 ret = regmap_register_patch(rt5640->regmap, init_list, in rt5640_i2c_probe()
2826 dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret); in rt5640_i2c_probe()
2828 regmap_update_bits(rt5640->regmap, RT5640_DUMMY1, in rt5640_i2c_probe()
2831 rt5640->hp_mute = 1; in rt5640_i2c_probe()
2832 rt5640->irq = i2c->irq; in rt5640_i2c_probe()
2833 INIT_DELAYED_WORK(&rt5640->bp_work, rt5640_button_press_work); in rt5640_i2c_probe()
2834 INIT_WORK(&rt5640->jack_work, rt5640_jack_work); in rt5640_i2c_probe()
2836 /* Make sure work is stopped on probe-error / remove */ in rt5640_i2c_probe()
2837 ret = devm_add_action_or_reset(&i2c->dev, rt5640_cancel_work, rt5640); in rt5640_i2c_probe()
2841 ret = devm_request_irq(&i2c->dev, rt5640->irq, rt5640_irq, in rt5640_i2c_probe()
2845 /* Gets re-enabled by rt5640_set_jack() */ in rt5640_i2c_probe()
2846 disable_irq(rt5640->irq); in rt5640_i2c_probe()
2848 dev_warn(&i2c->dev, "Failed to reguest IRQ %d: %d\n", in rt5640_i2c_probe()
2849 rt5640->irq, ret); in rt5640_i2c_probe()
2850 rt5640->irq = -ENXIO; in rt5640_i2c_probe()
2853 return devm_snd_soc_register_component(&i2c->dev, in rt5640_i2c_probe()