Lines Matching +full:out +full:- +full:mono
1 // SPDX-License-Identifier: GPL-2.0-only
3 * nau8810.c -- NAU8810 ALSA Soc Audio driver
169 struct soc_bytes_ext *params = (void *)kcontrol->private_value;
174 val = (u16 *)ucontrol->value.bytes.data;
176 for (i = 0; i < params->max / sizeof(u16); i++) {
177 regmap_read(nau8810->regmap, reg + i, ®_val);
178 /* conversion of 16-bit integers between native CPU format
190 * cut-off frequency, bandwidth control, and equalizer path.
201 struct soc_bytes_ext *params = (void *)kcontrol->private_value;
207 data = kmemdup(ucontrol->value.bytes.data,
208 params->max, GFP_KERNEL | GFP_DMA);
210 return -ENOMEM;
214 for (i = 0; i < params->max / sizeof(u16); i++) {
215 /* conversion of 16-bit integers between native CPU format
220 ret = regmap_write(nau8810->regmap, reg + i, value);
222 dev_err(component->dev, "EQ configuration fail, register: %x ret: %d\n",
234 "Off", "NC", "u-law", "A-law" };
263 static const DECLARE_TLV_DB_SCALE(digital_tlv, -12750, 50, 1);
264 static const DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
265 static const DECLARE_TLV_DB_SCALE(inpga_tlv, -1200, 75, 0);
266 static const DECLARE_TLV_DB_SCALE(spk_tlv, -5700, 100, 0);
271 SOC_ENUM("DAC De-emphasis", nau8810_deemp_enum),
350 SOC_SINGLE("Mono Mute Switch", NAU8810_REG_MONOMIX,
369 /* Mono Output Mixer */
407 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
411 regmap_read(nau8810->regmap, NAU8810_REG_CLOCK, &value);
419 snd_soc_dapm_to_component(source->dapm);
423 regmap_read(nau8810->regmap, NAU8810_REG_INPUT_SIGNAL, &value);
426 regmap_read(nau8810->regmap, NAU8810_REG_ADCBOOST, &value);
436 SND_SOC_DAPM_MIXER("Mono Mixer", NAU8810_REG_POWER3,
443 SND_SOC_DAPM_PGA("SpkN Out", NAU8810_REG_POWER3,
445 SND_SOC_DAPM_PGA("SpkP Out", NAU8810_REG_POWER3,
447 SND_SOC_DAPM_PGA("Mono Out", NAU8810_REG_POWER3,
478 /* Mono output mixer */
479 {"Mono Mixer", "AUX Bypass Switch", "AUX Input"},
480 {"Mono Mixer", "PCM Playback Switch", "DAC"},
481 {"Mono Mixer", "Line Bypass Switch", "Input Boost Stage"},
489 {"Mono Out", NULL, "Mono Mixer"},
490 {"MONOOUT", NULL, "Mono Out"},
491 {"SpkN Out", NULL, "Speaker Mixer"},
492 {"SpkP Out", NULL, "Speaker Mixer"},
493 {"SPKOUTN", NULL, "SpkN Out"},
494 {"SPKOUTP", NULL, "SpkP Out"},
518 struct snd_soc_component *component = dai->component;
521 nau8810->clk_id = clk_id;
522 nau8810->sysclk = freq;
523 dev_dbg(nau8810->dev, "master sysclk %dHz, source %s\n",
536 return -EINVAL;
550 return -EINVAL;
551 pll_param->mclk_scaler = scal_sel;
554 /* Calculate the PLL 4-bit integer input and the PLL 24-bit fractional
558 pll_param->pre_factor = 0;
561 pll_param->pre_factor = 1;
563 pll_param->pll_int = (pll_ratio >> 28) & 0xF;
564 pll_param->pll_frac = ((pll_ratio & 0xFFFFFFF) >> 4);
572 struct snd_soc_component *component = codec_dai->component;
574 struct regmap *map = nau8810->regmap;
575 struct nau8810_pll *pll_param = &nau8810->pll;
581 dev_err(nau8810->dev, "Unsupported input clock %d\n", freq_in);
584 dev_info(nau8810->dev, "pll_int=%x pll_frac=%x mclk_scaler=%x pre_factor=%x\n",
585 pll_param->pll_int, pll_param->pll_frac, pll_param->mclk_scaler,
586 pll_param->pre_factor);
590 (pll_param->pre_factor ? NAU8810_PLLMCLK_DIV2 : 0) |
591 pll_param->pll_int);
593 (pll_param->pll_frac >> NAU8810_PLLK1_SFT) &
596 (pll_param->pll_frac >> NAU8810_PLLK2_SFT) &
599 pll_param->pll_frac & NAU8810_PLLK3_MASK);
601 pll_param->mclk_scaler << NAU8810_MCLKSEL_SFT);
611 struct snd_soc_component *component = codec_dai->component;
622 return -EINVAL;
638 return -EINVAL;
654 return -EINVAL;
657 regmap_update_bits(nau8810->regmap, NAU8810_REG_IFACE,
660 regmap_update_bits(nau8810->regmap, NAU8810_REG_CLOCK,
670 if (!nau8810->sysclk) {
671 dev_err(nau8810->dev, "Make mclk div configuration fail because of invalid system clock\n");
672 return -EINVAL;
680 sclk = (nau8810->sysclk * 10) /
686 dev_dbg(nau8810->dev,
690 regmap_update_bits(nau8810->regmap, NAU8810_REG_CLOCK,
692 regmap_update_bits(nau8810->regmap, NAU8810_REG_CLOCK,
701 struct snd_soc_component *component = dai->component;
707 regmap_read(nau8810->regmap, NAU8810_REG_CLOCK, &ctrl_val);
718 return -EINVAL;
719 regmap_update_bits(nau8810->regmap, NAU8810_REG_CLOCK,
758 regmap_update_bits(nau8810->regmap, NAU8810_REG_IFACE,
760 regmap_update_bits(nau8810->regmap, NAU8810_REG_SMPLR,
766 if (nau8810->clk_id == NAU8810_SCLK_MCLK) {
769 dev_err(nau8810->dev, "MCLK div configuration fail\n");
779 struct regmap *map = nau8810->regmap;
827 .name = "nau8810-hifi",
876 struct device *dev = &i2c->dev;
882 return -ENOMEM;
886 nau8810->regmap = devm_regmap_init_i2c(i2c, &nau8810_regmap_config);
887 if (IS_ERR(nau8810->regmap))
888 return PTR_ERR(nau8810->regmap);
889 nau8810->dev = dev;
891 regmap_write(nau8810->regmap, NAU8810_REG_RESET, 0x00);