• Home
  • Raw
  • Download

Lines Matching +full:switch +full:- +full:freq +full:- +full:select

1 // SPDX-License-Identifier: GPL-2.0-or-later
7 * Author: Lars-Peter Clausen <lars@metafoo.de>
113 #define ADAV80X_PLL_OUTE_SYSCLKPD(x) BIT(2 - (x))
196 ADAV80X_MUX("Aux Capture Select", &adav80x_aux_capture_mux_ctrl),
197 ADAV80X_MUX("Capture Select", &adav80x_capture_mux_ctrl),
198 ADAV80X_MUX("DAC Select", &adav80x_dac_mux_ctrl),
214 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adav80x_dapm_sysclk_check()
218 switch (adav80x->clk_src) { in adav80x_dapm_sysclk_check()
232 return strcmp(source->name, clk) == 0; in adav80x_dapm_sysclk_check()
238 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adav80x_dapm_pll_check()
241 return adav80x->pll_src == ADAV80X_PLL_SRC_XTAL; in adav80x_dapm_pll_check()
246 { "DAC Select", "ADC", "ADC" },
247 { "DAC Select", "Playback", "AIFIN" },
248 { "DAC Select", "Aux Playback", "AIFAUXIN" },
249 { "DAC", NULL, "DAC Select" },
251 { "Capture Select", "ADC", "ADC" },
252 { "Capture Select", "Playback", "AIFIN" },
253 { "Capture Select", "Aux Playback", "AIFAUXIN" },
254 { "AIFOUT", NULL, "Capture Select" },
256 { "Aux Capture Select", "ADC", "ADC" },
257 { "Aux Capture Select", "Playback", "AIFIN" },
258 { "Aux Capture Select", "Aux Playback", "AIFAUXIN" },
259 { "AIFAUXOUT", NULL, "Aux Capture Select" },
288 if (adav80x->deemph) { in adav80x_set_deemph()
289 switch (adav80x->rate) { in adav80x_set_deemph()
310 return regmap_update_bits(adav80x->regmap, ADAV80X_DAC_CTRL2, in adav80x_set_deemph()
319 unsigned int deemph = ucontrol->value.integer.value[0]; in adav80x_put_deemph()
322 return -EINVAL; in adav80x_put_deemph()
324 adav80x->deemph = deemph; in adav80x_put_deemph()
335 ucontrol->value.integer.value[0] = adav80x->deemph; in adav80x_get_deemph()
340 static const DECLARE_TLV_DB_MINMAX(adav80x_digital_tlv, -9563, 0);
351 SOC_DOUBLE("Master Playback Switch", ADAV80X_DAC_CTRL1, 0, 1, 1, 0),
352 SOC_DOUBLE("Master Capture Switch", ADAV80X_ADC_CTRL1, 2, 3, 1, 1),
354 SOC_SINGLE("ADC High Pass Filter Switch", ADAV80X_ADC_CTRL1, 6, 1, 0),
356 SOC_SINGLE_BOOL_EXT("Playback De-emphasis Switch", 0,
367 struct snd_soc_component *component = dai->component; in adav80x_set_dai_fmt()
372 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { in adav80x_set_dai_fmt()
379 return -EINVAL; in adav80x_set_dai_fmt()
382 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { in adav80x_set_dai_fmt()
396 return -EINVAL; in adav80x_set_dai_fmt()
399 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { in adav80x_set_dai_fmt()
403 return -EINVAL; in adav80x_set_dai_fmt()
406 regmap_update_bits(adav80x->regmap, adav80x_port_ctrl_regs[dai->id][0], in adav80x_set_dai_fmt()
409 regmap_write(adav80x->regmap, adav80x_port_ctrl_regs[dai->id][1], in adav80x_set_dai_fmt()
412 adav80x->dai_fmt[dai->id] = fmt & SND_SOC_DAIFMT_FORMAT_MASK; in adav80x_set_dai_fmt()
428 regmap_update_bits(adav80x->regmap, ADAV80X_ADC_CTRL1, in adav80x_set_adc_clock()
445 regmap_update_bits(adav80x->regmap, ADAV80X_DAC_CTRL2, in adav80x_set_dac_clock()
458 switch (params_width(params)) { in adav80x_set_capture_pcm_format()
472 return -EINVAL; in adav80x_set_capture_pcm_format()
475 regmap_update_bits(adav80x->regmap, adav80x_port_ctrl_regs[dai->id][0], in adav80x_set_capture_pcm_format()
487 if (adav80x->dai_fmt[dai->id] != SND_SOC_DAIFMT_RIGHT_J) in adav80x_set_playback_pcm_format()
490 switch (params_width(params)) { in adav80x_set_playback_pcm_format()
504 return -EINVAL; in adav80x_set_playback_pcm_format()
507 regmap_update_bits(adav80x->regmap, adav80x_port_ctrl_regs[dai->id][1], in adav80x_set_playback_pcm_format()
516 struct snd_soc_component *component = dai->component; in adav80x_hw_params()
520 if (rate * 256 != adav80x->sysclk) in adav80x_hw_params()
521 return -EINVAL; in adav80x_hw_params()
523 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in adav80x_hw_params()
530 adav80x->rate = rate; in adav80x_hw_params()
538 unsigned int freq, int dir) in adav80x_set_sysclk() argument
544 switch (clk_id) { in adav80x_set_sysclk()
552 return -EINVAL; in adav80x_set_sysclk()
555 adav80x->sysclk = freq; in adav80x_set_sysclk()
557 if (adav80x->clk_src != clk_id) { in adav80x_set_sysclk()
560 adav80x->clk_src = clk_id; in adav80x_set_sysclk()
569 regmap_write(adav80x->regmap, ADAV80X_ICLK_CTRL1, in adav80x_set_sysclk()
571 regmap_write(adav80x->regmap, ADAV80X_ICLK_CTRL2, in adav80x_set_sysclk()
579 switch (clk_id) { in adav80x_set_sysclk()
585 return -EINVAL; in adav80x_set_sysclk()
588 clk_id -= ADAV80X_CLK_SYSCLK1; in adav80x_set_sysclk()
591 if (freq == 0) { in adav80x_set_sysclk()
592 regmap_update_bits(adav80x->regmap, ADAV80X_PLL_OUTE, in adav80x_set_sysclk()
594 adav80x->sysclk_pd[clk_id] = true; in adav80x_set_sysclk()
596 regmap_update_bits(adav80x->regmap, ADAV80X_PLL_OUTE, in adav80x_set_sysclk()
598 adav80x->sysclk_pd[clk_id] = false; in adav80x_set_sysclk()
603 if (adav80x->sysclk_pd[0]) in adav80x_set_sysclk()
608 if (adav80x->sysclk_pd[1] || adav80x->sysclk_pd[2]) in adav80x_set_sysclk()
630 switch (source) { in adav80x_set_pll()
636 return -EINVAL; in adav80x_set_pll()
642 switch (freq_in) { in adav80x_set_pll()
652 return -EINVAL; in adav80x_set_pll()
661 switch (freq_out) { in adav80x_set_pll()
672 return -EINVAL; in adav80x_set_pll()
675 regmap_update_bits(adav80x->regmap, ADAV80X_PLL_CTRL1, in adav80x_set_pll()
677 regmap_update_bits(adav80x->regmap, ADAV80X_PLL_CTRL2, in adav80x_set_pll()
680 if (source != adav80x->pll_src) { in adav80x_set_pll()
686 regmap_update_bits(adav80x->regmap, ADAV80X_PLL_CLK_SRC, in adav80x_set_pll()
689 adav80x->pll_src = source; in adav80x_set_pll()
703 switch (level) { in adav80x_set_bias_level()
709 regmap_update_bits(adav80x->regmap, ADAV80X_DAC_CTRL1, mask, in adav80x_set_bias_level()
713 regmap_update_bits(adav80x->regmap, ADAV80X_DAC_CTRL1, mask, in adav80x_set_bias_level()
725 struct snd_soc_component *component = dai->component; in adav80x_dai_startup()
728 if (!snd_soc_component_active(component) || !adav80x->rate) in adav80x_dai_startup()
731 return snd_pcm_hw_constraint_single(substream->runtime, in adav80x_dai_startup()
732 SNDRV_PCM_HW_PARAM_RATE, adav80x->rate); in adav80x_dai_startup()
738 struct snd_soc_component *component = dai->component; in adav80x_dai_shutdown()
742 adav80x->rate = 0; in adav80x_dai_shutdown()
763 .name = "adav80x-hifi",
782 .name = "adav80x-aux",
812 regmap_write(adav80x->regmap, ADAV80X_PLL_OUTE, 0x20); in adav80x_probe()
814 regmap_write(adav80x->regmap, ADAV80X_DAC_CTRL3, 0x6); in adav80x_probe()
823 regcache_sync(adav80x->regmap); in adav80x_resume()
856 return -ENOMEM; in adav80x_bus_probe()
859 adav80x->regmap = regmap; in adav80x_bus_probe()
880 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");