Lines Matching +full:adc +full:- +full:sample +full:- +full:hold +full:- +full:time
1 // SPDX-License-Identifier: GPL-2.0-only
3 * wm8988.c -- WM8988 ALSA SoC audio driver
154 "Mute ADC Output"};
167 static const DECLARE_TLV_DB_SCALE(pga_tlv, -1725, 75, 0);
168 static const DECLARE_TLV_DB_SCALE(adc_tlv, -9750, 50, 1);
169 static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1);
170 static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);
171 static const DECLARE_TLV_DB_SCALE(bypass_tlv, -1500, 300, 0);
180 SOC_ENUM("Treble Cut-off", treble),
184 SOC_ENUM("3D Lower Cut-off", stereo_3d_lc),
185 SOC_ENUM("3D Upper Cut-off", stereo_3d_uc),
192 SOC_SINGLE("ALC Capture Hold Time", WM8988_ALC2, 0, 15, 0),
193 SOC_SINGLE("ALC Capture Decay Time", WM8988_ALC3, 4, 15, 0),
194 SOC_SINGLE("ALC Capture Attack Time", WM8988_ALC3, 0, 15, 0),
208 SOC_ENUM("Playback De-emphasis", deemph),
244 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in wm8988_lrc_control()
247 /* Use the DAC to gate LRC if active, otherwise use ADC */ in wm8988_lrc_control()
322 /* Mono ADC Mux */
335 SND_SOC_DAPM_MUX("Left ADC Mux", SND_SOC_NOPM, 0, 0,
337 SND_SOC_DAPM_MUX("Right ADC Mux", SND_SOC_NOPM, 0, 0,
350 SND_SOC_DAPM_ADC("Right ADC", "Right Capture", WM8988_PWR1, 2, 0),
351 SND_SOC_DAPM_ADC("Left ADC", "Left Capture", WM8988_PWR1, 3, 0),
407 { "Left ADC Mux", "Stereo", "Left PGA Mux" },
408 { "Left ADC Mux", "Mono (Left)", "Left PGA Mux" },
409 { "Left ADC Mux", "Digital Mono", "Left PGA Mux" },
411 { "Right ADC Mux", "Stereo", "Right PGA Mux" },
412 { "Right ADC Mux", "Mono (Right)", "Right PGA Mux" },
413 { "Right ADC Mux", "Digital Mono", "Right PGA Mux" },
415 { "Left ADC", NULL, "Left ADC Mux" },
416 { "Right ADC", NULL, "Right ADC Mux" },
516 return -EINVAL; in get_coeff()
555 struct snd_soc_component *component = codec_dai->component; in wm8988_set_dai_sysclk()
563 wm8988->sysclk_constraints = &constraints_112896; in wm8988_set_dai_sysclk()
564 wm8988->sysclk = freq; in wm8988_set_dai_sysclk()
571 wm8988->sysclk_constraints = &constraints_12288; in wm8988_set_dai_sysclk()
572 wm8988->sysclk = freq; in wm8988_set_dai_sysclk()
577 wm8988->sysclk_constraints = &constraints_12; in wm8988_set_dai_sysclk()
578 wm8988->sysclk = freq; in wm8988_set_dai_sysclk()
581 return -EINVAL; in wm8988_set_dai_sysclk()
587 struct snd_soc_component *component = codec_dai->component; in wm8988_set_dai_fmt()
598 return -EINVAL; in wm8988_set_dai_fmt()
618 return -EINVAL; in wm8988_set_dai_fmt()
635 return -EINVAL; in wm8988_set_dai_fmt()
645 struct snd_soc_component *component = dai->component; in wm8988_pcm_startup()
648 /* The set of sample rates that can be supported depends on the in wm8988_pcm_startup()
649 * MCLK supplied to the CODEC - enforce this. in wm8988_pcm_startup()
651 if (!wm8988->sysclk) { in wm8988_pcm_startup()
652 dev_err(component->dev, in wm8988_pcm_startup()
654 return -EINVAL; in wm8988_pcm_startup()
657 snd_pcm_hw_constraint_list(substream->runtime, 0, in wm8988_pcm_startup()
659 wm8988->sysclk_constraints); in wm8988_pcm_startup()
668 struct snd_soc_component *component = dai->component; in wm8988_pcm_hw_params()
674 coeff = get_coeff(wm8988->sysclk, params_rate(params)); in wm8988_pcm_hw_params()
676 coeff = get_coeff(wm8988->sysclk / 2, params_rate(params)); in wm8988_pcm_hw_params()
680 dev_err(component->dev, in wm8988_pcm_hw_params()
681 "Unable to configure sample rate %dHz with %dHz MCLK\n", in wm8988_pcm_hw_params()
682 params_rate(params), wm8988->sysclk); in wm8988_pcm_hw_params()
712 struct snd_soc_component *component = dai->component; in wm8988_mute()
739 regcache_sync(wm8988->regmap); in wm8988_set_bias_level()
774 .name = "wm8988-hifi",
799 dev_err(component->dev, "Failed to issue reset\n"); in wm8988_probe()
846 wm8988 = devm_kzalloc(&spi->dev, sizeof(struct wm8988_priv), in wm8988_spi_probe()
849 return -ENOMEM; in wm8988_spi_probe()
851 wm8988->regmap = devm_regmap_init_spi(spi, &wm8988_regmap); in wm8988_spi_probe()
852 if (IS_ERR(wm8988->regmap)) { in wm8988_spi_probe()
853 ret = PTR_ERR(wm8988->regmap); in wm8988_spi_probe()
854 dev_err(&spi->dev, "Failed to init regmap: %d\n", ret); in wm8988_spi_probe()
860 ret = devm_snd_soc_register_component(&spi->dev, in wm8988_spi_probe()
879 wm8988 = devm_kzalloc(&i2c->dev, sizeof(struct wm8988_priv), in wm8988_i2c_probe()
882 return -ENOMEM; in wm8988_i2c_probe()
886 wm8988->regmap = devm_regmap_init_i2c(i2c, &wm8988_regmap); in wm8988_i2c_probe()
887 if (IS_ERR(wm8988->regmap)) { in wm8988_i2c_probe()
888 ret = PTR_ERR(wm8988->regmap); in wm8988_i2c_probe()
889 dev_err(&i2c->dev, "Failed to init regmap: %d\n", ret); in wm8988_i2c_probe()
893 ret = devm_snd_soc_register_component(&i2c->dev, in wm8988_i2c_probe()