Lines Matching +full:boost +full:- +full:bypass

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Author: Lars-Peter Clausen <[email protected]>
25 #include "adau-utils.h"
343 0, 7, TLV_DB_SCALE_ITEM(-7900, 400, 1),
344 8, 15, TLV_DB_SCALE_ITEM(-4700, 300, 0),
345 16, 23, TLV_DB_SCALE_ITEM(-2300, 200, 0),
346 24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0)
349 static const DECLARE_TLV_DB_MINMAX(adau1373_digital_tlv, -9563, 0);
350 static const DECLARE_TLV_DB_SCALE(adau1373_in_pga_tlv, -1300, 100, 1);
351 static const DECLARE_TLV_DB_SCALE(adau1373_ep_tlv, -600, 600, 1);
403 0, 2, TLV_DB_SCALE_ITEM(-600, 600, 1),
436 1, 7, TLV_DB_LINEAR_ITEM(-1800, -120)
497 SOC_DOUBLE_TLV("AIF3 Boost Playback Volume", ADAU1373_VOL_GAIN1, 4, 5,
499 SOC_DOUBLE_TLV("AIF2 Boost Playback Volume", ADAU1373_VOL_GAIN1, 2, 3,
501 SOC_DOUBLE_TLV("AIF1 Boost Playback Volume", ADAU1373_VOL_GAIN1, 0, 1,
503 SOC_DOUBLE_TLV("AIF3 Boost Capture Volume", ADAU1373_VOL_GAIN2, 4, 5,
505 SOC_DOUBLE_TLV("AIF2 Boost Capture Volume", ADAU1373_VOL_GAIN2, 2, 3,
507 SOC_DOUBLE_TLV("AIF1 Boost Capture Volume", ADAU1373_VOL_GAIN2, 0, 1,
509 SOC_DOUBLE_TLV("DMIC Boost Capture Volume", ADAU1373_VOL_GAIN3, 6, 7,
511 SOC_DOUBLE_TLV("ADC Boost Capture Volume", ADAU1373_VOL_GAIN3, 4, 5,
513 SOC_DOUBLE_TLV("DAC2 Boost Playback Volume", ADAU1373_VOL_GAIN3, 2, 3,
515 SOC_DOUBLE_TLV("DAC1 Boost Playback Volume", ADAU1373_VOL_GAIN3, 0, 1,
518 SOC_DOUBLE_TLV("Input 1 Boost Capture Volume", ADAU1373_ADC_GAIN, 0, 4,
520 SOC_DOUBLE_TLV("Input 2 Boost Capture Volume", ADAU1373_ADC_GAIN, 1, 5,
522 SOC_DOUBLE_TLV("Input 3 Boost Capture Volume", ADAU1373_ADC_GAIN, 2, 6,
524 SOC_DOUBLE_TLV("Input 4 Boost Capture Volume", ADAU1373_ADC_GAIN, 3, 7,
527 SOC_DOUBLE_TLV("Speaker Boost Playback Volume", ADAU1373_LS_CTRL, 2, 3,
570 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in adau1373_pll_event()
572 unsigned int pll_id = w->name[3] - '1'; in adau1373_pll_event()
580 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_pll_event()
622 SOC_DAPM_SINGLE("Input 4 Bypass Switch", _reg, 3, 1, 0), \
623 SOC_DAPM_SINGLE("Input 3 Bypass Switch", _reg, 2, 1, 0), \
624 SOC_DAPM_SINGLE("Input 2 Bypass Switch", _reg, 1, 1, 0), \
625 SOC_DAPM_SINGLE("Input 1 Bypass Switch", _reg, 0, 1, 0), \
646 SOC_DAPM_SINGLE("Input 4 Bypass Switch", ADAU1373_LHP_MIX, 3, 1, 0),
647 SOC_DAPM_SINGLE("Input 3 Bypass Switch", ADAU1373_LHP_MIX, 2, 1, 0),
648 SOC_DAPM_SINGLE("Input 2 Bypass Switch", ADAU1373_LHP_MIX, 1, 1, 0),
649 SOC_DAPM_SINGLE("Input 1 Bypass Switch", ADAU1373_LHP_MIX, 0, 1, 0),
655 SOC_DAPM_SINGLE("Input 4 Bypass Switch", ADAU1373_RHP_MIX, 3, 1, 0),
656 SOC_DAPM_SINGLE("Input 3 Bypass Switch", ADAU1373_RHP_MIX, 2, 1, 0),
657 SOC_DAPM_SINGLE("Input 2 Bypass Switch", ADAU1373_RHP_MIX, 1, 1, 0),
658 SOC_DAPM_SINGLE("Input 1 Bypass Switch", ADAU1373_RHP_MIX, 0, 1, 0),
842 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adau1373_check_aif_clk()
847 dai = sink->name[3] - '1'; in adau1373_check_aif_clk()
849 if (!adau1373->dais[dai].clock_provider) in adau1373_check_aif_clk()
852 if (adau1373->dais[dai].clk_src == ADAU1373_CLK_SRC_PLL1) in adau1373_check_aif_clk()
863 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adau1373_check_src()
867 dai = sink->name[3] - '1'; in adau1373_check_src()
869 return adau1373->dais[dai].enable_src; in adau1373_check_src()
893 { _sink, "Input 1 Bypass Switch", "IN1PGA" }, \
894 { _sink, "Input 2 Bypass Switch", "IN2PGA" }, \
895 { _sink, "Input 3 Bypass Switch", "IN3PGA" }, \
896 { _sink, "Input 4 Bypass Switch", "IN4PGA" }
903 { _sink, "Input 1 Bypass Switch", "IN1PGA" }, \
904 { _sink, "Input 2 Bypass Switch", "IN2PGA" }, \
905 { _sink, "Input 3 Bypass Switch", "IN3PGA" }, \
906 { _sink, "Input 4 Bypass Switch", "IN4PGA" }
957 { "Left Headphone Mixer", "Input 1 Bypass Switch", "IN1PGA" },
958 { "Left Headphone Mixer", "Input 2 Bypass Switch", "IN2PGA" },
959 { "Left Headphone Mixer", "Input 3 Bypass Switch", "IN3PGA" },
960 { "Left Headphone Mixer", "Input 4 Bypass Switch", "IN4PGA" },
963 { "Right Headphone Mixer", "Input 1 Bypass Switch", "IN1PGA" },
964 { "Right Headphone Mixer", "Input 2 Bypass Switch", "IN2PGA" },
965 { "Right Headphone Mixer", "Input 3 Bypass Switch", "IN3PGA" },
966 { "Right Headphone Mixer", "Input 4 Bypass Switch", "IN4PGA" },
975 { "Earpiece Mixer", "Input 1 Bypass Switch", "IN1PGA" },
976 { "Earpiece Mixer", "Input 2 Bypass Switch", "IN2PGA" },
977 { "Earpiece Mixer", "Input 3 Bypass Switch", "IN3PGA" },
978 { "Earpiece Mixer", "Input 4 Bypass Switch", "IN4PGA" },
1052 struct snd_soc_component *component = dai->component; in adau1373_hw_params()
1054 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_hw_params()
1059 freq = adau1373_dai->sysclk; in adau1373_hw_params()
1062 return -EINVAL; in adau1373_hw_params()
1087 return -EINVAL; in adau1373_hw_params()
1090 adau1373_dai->enable_src = (div != 0); in adau1373_hw_params()
1092 regmap_update_bits(adau1373->regmap, ADAU1373_BCLKDIV(dai->id), in adau1373_hw_params()
1110 return -EINVAL; in adau1373_hw_params()
1113 return regmap_update_bits(adau1373->regmap, ADAU1373_DAI(dai->id), in adau1373_hw_params()
1119 struct snd_soc_component *component = dai->component; in adau1373_set_dai_fmt()
1121 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_set_dai_fmt()
1127 adau1373_dai->clock_provider = true; in adau1373_set_dai_fmt()
1131 adau1373_dai->clock_provider = false; in adau1373_set_dai_fmt()
1134 return -EINVAL; in adau1373_set_dai_fmt()
1151 return -EINVAL; in adau1373_set_dai_fmt()
1167 return -EINVAL; in adau1373_set_dai_fmt()
1170 regmap_update_bits(adau1373->regmap, ADAU1373_DAI(dai->id), in adau1373_set_dai_fmt()
1179 struct adau1373 *adau1373 = snd_soc_component_get_drvdata(dai->component); in adau1373_set_dai_sysclk()
1180 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_set_dai_sysclk()
1187 return -EINVAL; in adau1373_set_dai_sysclk()
1190 adau1373_dai->sysclk = freq; in adau1373_set_dai_sysclk()
1191 adau1373_dai->clk_src = clk_id; in adau1373_set_dai_sysclk()
1193 regmap_update_bits(adau1373->regmap, ADAU1373_BCLKDIV(dai->id), in adau1373_set_dai_sysclk()
1211 .name = "adau1373-aif1",
1231 .name = "adau1373-aif2",
1251 .name = "adau1373-aif3",
1284 return -EINVAL; in adau1373_set_pll()
1302 return -EINVAL; in adau1373_set_pll()
1306 return -EINVAL; in adau1373_set_pll()
1309 return -EINVAL; in adau1373_set_pll()
1320 return -EINVAL; in adau1373_set_pll()
1323 dpll_div = 11 - dpll_div; in adau1373_set_pll()
1324 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_set_pll()
1327 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_set_pll()
1332 regmap_write(adau1373->regmap, ADAU1373_DPLL_CTRL(pll_id), in adau1373_set_pll()
1334 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL1(pll_id), pll_regs[0]); in adau1373_set_pll()
1335 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL2(pll_id), pll_regs[1]); in adau1373_set_pll()
1336 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL3(pll_id), pll_regs[2]); in adau1373_set_pll()
1337 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL4(pll_id), pll_regs[3]); in adau1373_set_pll()
1338 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL5(pll_id), pll_regs[4]); in adau1373_set_pll()
1341 regmap_update_bits(adau1373->regmap, ADAU1373_CLK_SRC_DIV(pll_id), 0x3f, 0x09); in adau1373_set_pll()
1352 regmap_write(adau1373->regmap, ADAU1373_DRC(nr) + i, drc[i]); in adau1373_load_drc_settings()
1372 return -EINVAL; in adau1373_get_micbias()
1382 for (i = 0; i < adau1373->num_drc; ++i) { in adau1373_probe()
1384 adau1373->drc_setting[i]); in adau1373_probe()
1388 adau1373->num_drc); in adau1373_probe()
1391 for (i = 0; i < ARRAY_SIZE(adau1373->input_differential); ++i) { in adau1373_probe()
1392 if (adau1373->input_differential[i]) in adau1373_probe()
1395 regmap_write(adau1373->regmap, ADAU1373_INPUT_MODE, val); in adau1373_probe()
1398 if (adau1373->lineout_differential) in adau1373_probe()
1400 if (adau1373->lineout_ground_sense) in adau1373_probe()
1403 regmap_write(adau1373->regmap, ADAU1373_OUTPUT_CTRL, val); in adau1373_probe()
1405 regmap_write(adau1373->regmap, ADAU1373_EP_CTRL, in adau1373_probe()
1406 (adau1373->micbias1 << ADAU1373_EP_CTRL_MICBIAS1_OFFSET) | in adau1373_probe()
1407 (adau1373->micbias2 << ADAU1373_EP_CTRL_MICBIAS2_OFFSET)); in adau1373_probe()
1409 if (!adau1373->lineout_differential) { in adau1373_probe()
1414 regmap_write(adau1373->regmap, ADAU1373_ADC_CTRL, in adau1373_probe()
1431 regmap_update_bits(adau1373->regmap, ADAU1373_PWDN_CTRL3, in adau1373_set_bias_level()
1435 regmap_update_bits(adau1373->regmap, ADAU1373_PWDN_CTRL3, in adau1373_set_bias_level()
1446 regcache_sync(adau1373->regmap); in adau1373_resume()
1499 if (device_property_present(dev, "adi,input1-differential")) in adau1373_parse_fw()
1500 adau1373->input_differential[0] = true; in adau1373_parse_fw()
1501 if (device_property_present(dev, "adi,input2-differential")) in adau1373_parse_fw()
1502 adau1373->input_differential[1] = true; in adau1373_parse_fw()
1503 if (device_property_present(dev, "adi,input3-differential")) in adau1373_parse_fw()
1504 adau1373->input_differential[2] = true; in adau1373_parse_fw()
1505 if (device_property_present(dev, "adi,input4-differential")) in adau1373_parse_fw()
1506 adau1373->input_differential[3] = true; in adau1373_parse_fw()
1508 if (device_property_present(dev, "adi,lineout-differential")) in adau1373_parse_fw()
1509 adau1373->lineout_differential = true; in adau1373_parse_fw()
1510 if (device_property_present(dev, "adi,lineout-gnd-sense")) in adau1373_parse_fw()
1511 adau1373->lineout_ground_sense = true; in adau1373_parse_fw()
1513 ret = device_property_read_u32(dev, "adi,micbias1-microvolt", &val); in adau1373_parse_fw()
1515 ret = adau1373_get_micbias(val, &adau1373->micbias1); in adau1373_parse_fw()
1521 ret = device_property_read_u32(dev, "adi,micbias2-microvolt", &val); in adau1373_parse_fw()
1523 ret = adau1373_get_micbias(val, &adau1373->micbias2); in adau1373_parse_fw()
1529 drc_count = device_property_count_u8(dev, "adi,drc-settings"); in adau1373_parse_fw()
1533 return dev_err_probe(dev, -EINVAL, in adau1373_parse_fw()
1537 adau1373->num_drc = drc_count / ADAU1373_DRC_SIZE; in adau1373_parse_fw()
1538 if (adau1373->num_drc > ARRAY_SIZE(adau1373->drc_setting)) in adau1373_parse_fw()
1539 return dev_err_probe(dev, -EINVAL, in adau1373_parse_fw()
1541 adau1373->num_drc); in adau1373_parse_fw()
1543 ret = device_property_read_u8_array(dev, "adi,drc-settings", in adau1373_parse_fw()
1544 (u8 *)&adau1373->drc_setting[0], in adau1373_parse_fw()
1559 adau1373 = devm_kzalloc(&client->dev, sizeof(*adau1373), GFP_KERNEL); in adau1373_i2c_probe()
1561 return -ENOMEM; in adau1373_i2c_probe()
1563 adau1373->regmap = devm_regmap_init_i2c(client, in adau1373_i2c_probe()
1565 if (IS_ERR(adau1373->regmap)) in adau1373_i2c_probe()
1566 return PTR_ERR(adau1373->regmap); in adau1373_i2c_probe()
1572 gpiod = devm_gpiod_get_optional(&client->dev, "powerdown", in adau1373_i2c_probe()
1581 ret = devm_add_action_or_reset(&client->dev, adau1373_reset, in adau1373_i2c_probe()
1586 regmap_write(adau1373->regmap, ADAU1373_SOFT_RESET, 0x00); in adau1373_i2c_probe()
1589 dev_set_drvdata(&client->dev, adau1373); in adau1373_i2c_probe()
1591 ret = adau1373_parse_fw(&client->dev, adau1373); in adau1373_i2c_probe()
1595 ret = devm_snd_soc_register_component(&client->dev, in adau1373_i2c_probe()
1625 MODULE_AUTHOR("Lars-Peter Clausen <[email protected]>");