Lines Matching +full:codec +full:- +full:aif3
2 * Analog Devices ADAU1373 Audio Codec drive
5 * Author: Lars-Peter Clausen <lars@metafoo.de>
7 * Licensed under the GPL-2 or later.
26 #include "adau-utils.h"
325 0, 7, TLV_DB_SCALE_ITEM(-7900, 400, 1),
326 8, 15, TLV_DB_SCALE_ITEM(-4700, 300, 0),
327 16, 23, TLV_DB_SCALE_ITEM(-2300, 200, 0),
328 24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0)
331 static const DECLARE_TLV_DB_MINMAX(adau1373_digital_tlv, -9563, 0);
332 static const DECLARE_TLV_DB_SCALE(adau1373_in_pga_tlv, -1300, 100, 1);
333 static const DECLARE_TLV_DB_SCALE(adau1373_ep_tlv, -600, 600, 1);
385 0, 2, TLV_DB_SCALE_ITEM(-600, 600, 1),
418 1, 7, TLV_DB_LINEAR_ITEM(-1800, -120)
440 SOC_DOUBLE_R_TLV("AIF3 Capture Volume", ADAU1373_DAI_RECL_VOL(2),
452 SOC_DOUBLE_R_TLV("AIF3 Playback Volume", ADAU1373_DAI_PBL_VOL(2),
479 SOC_DOUBLE_TLV("AIF3 Boost Playback Volume", ADAU1373_VOL_GAIN1, 4, 5,
485 SOC_DOUBLE_TLV("AIF3 Boost Capture Volume", ADAU1373_VOL_GAIN2, 4, 5,
552 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in adau1373_pll_event()
554 unsigned int pll_id = w->name[3] - '1'; in adau1373_pll_event()
562 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_pll_event()
649 SOC_DAPM_SINGLE("AIF3 Switch", _reg, 2, 1, 0), \
741 SND_SOC_DAPM_SUPPLY("AIF3 CLK", ADAU1373_SRC_DAI_CTRL(2), 0, 0,
751 SND_SOC_DAPM_SUPPLY("AIF3 IN SRC", ADAU1373_SRC_DAI_CTRL(2), 2, 0,
753 SND_SOC_DAPM_SUPPLY("AIF3 OUT SRC", ADAU1373_SRC_DAI_CTRL(2), 1, 0,
760 SND_SOC_DAPM_AIF_IN("AIF3 IN", "AIF3 Playback", 0, SND_SOC_NOPM, 0, 0),
761 SND_SOC_DAPM_AIF_OUT("AIF3 OUT", "AIF3 Capture", 0, SND_SOC_NOPM, 0, 0),
778 SOC_MIXER_ARRAY("AIF3 Mixer", SND_SOC_NOPM, 0, 0,
824 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adau1373_check_aif_clk()
829 dai = sink->name[3] - '1'; in adau1373_check_aif_clk()
831 if (!adau1373->dais[dai].master) in adau1373_check_aif_clk()
834 if (adau1373->dais[dai].clk_src == ADAU1373_CLK_SRC_PLL1) in adau1373_check_aif_clk()
839 return strcmp(source->name, clk) == 0; in adau1373_check_aif_clk()
845 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in adau1373_check_src()
849 dai = sink->name[3] - '1'; in adau1373_check_src()
851 return adau1373->dais[dai].enable_src; in adau1373_check_src()
861 { _sink, "AIF3 Switch", "AIF3 IN" }
918 DSP_OUTPUT_MIXER_ROUTES("AIF3 Mixer"),
924 { "AIF3 OUT", NULL, "AIF3 Mixer" },
995 { "AIF3 Mixer", NULL, "DSP" },
1005 { "AIF3 CLK", NULL, "SYSCLK1", adau1373_check_aif_clk },
1008 { "AIF3 CLK", NULL, "SYSCLK2", adau1373_check_aif_clk },
1014 { "AIF3 IN", NULL, "AIF3 CLK" },
1015 { "AIF3 OUT", NULL, "AIF3 CLK" },
1020 { "AIF3 IN", NULL, "AIF3 IN SRC", adau1373_check_src },
1021 { "AIF3 OUT", NULL, "AIF3 OUT SRC", adau1373_check_src },
1034 struct snd_soc_component *component = dai->component; in adau1373_hw_params()
1036 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_hw_params()
1041 freq = adau1373_dai->sysclk; in adau1373_hw_params()
1044 return -EINVAL; in adau1373_hw_params()
1069 return -EINVAL; in adau1373_hw_params()
1072 adau1373_dai->enable_src = (div != 0); in adau1373_hw_params()
1074 regmap_update_bits(adau1373->regmap, ADAU1373_BCLKDIV(dai->id), in adau1373_hw_params()
1092 return -EINVAL; in adau1373_hw_params()
1095 return regmap_update_bits(adau1373->regmap, ADAU1373_DAI(dai->id), in adau1373_hw_params()
1101 struct snd_soc_component *component = dai->component; in adau1373_set_dai_fmt()
1103 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_set_dai_fmt()
1109 adau1373_dai->master = true; in adau1373_set_dai_fmt()
1113 adau1373_dai->master = false; in adau1373_set_dai_fmt()
1116 return -EINVAL; in adau1373_set_dai_fmt()
1133 return -EINVAL; in adau1373_set_dai_fmt()
1149 return -EINVAL; in adau1373_set_dai_fmt()
1152 regmap_update_bits(adau1373->regmap, ADAU1373_DAI(dai->id), in adau1373_set_dai_fmt()
1161 struct adau1373 *adau1373 = snd_soc_component_get_drvdata(dai->component); in adau1373_set_dai_sysclk()
1162 struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id]; in adau1373_set_dai_sysclk()
1169 return -EINVAL; in adau1373_set_dai_sysclk()
1172 adau1373_dai->sysclk = freq; in adau1373_set_dai_sysclk()
1173 adau1373_dai->clk_src = clk_id; in adau1373_set_dai_sysclk()
1175 regmap_update_bits(adau1373->regmap, ADAU1373_BCLKDIV(dai->id), in adau1373_set_dai_sysclk()
1193 .name = "adau1373-aif1",
1213 .name = "adau1373-aif2",
1233 .name = "adau1373-aif3",
1235 .stream_name = "AIF3 Playback",
1242 .stream_name = "AIF3 Capture",
1266 return -EINVAL; in adau1373_set_pll()
1284 return -EINVAL; in adau1373_set_pll()
1288 return -EINVAL; in adau1373_set_pll()
1291 return -EINVAL; in adau1373_set_pll()
1302 return -EINVAL; in adau1373_set_pll()
1305 dpll_div = 11 - dpll_div; in adau1373_set_pll()
1306 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_set_pll()
1309 regmap_update_bits(adau1373->regmap, ADAU1373_PLL_CTRL6(pll_id), in adau1373_set_pll()
1314 regmap_write(adau1373->regmap, ADAU1373_DPLL_CTRL(pll_id), in adau1373_set_pll()
1316 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL1(pll_id), pll_regs[0]); in adau1373_set_pll()
1317 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL2(pll_id), pll_regs[1]); in adau1373_set_pll()
1318 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL3(pll_id), pll_regs[2]); in adau1373_set_pll()
1319 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL4(pll_id), pll_regs[3]); in adau1373_set_pll()
1320 regmap_write(adau1373->regmap, ADAU1373_PLL_CTRL5(pll_id), pll_regs[4]); in adau1373_set_pll()
1323 regmap_update_bits(adau1373->regmap, ADAU1373_CLK_SRC_DIV(pll_id), 0x3f, 0x09); in adau1373_set_pll()
1334 regmap_write(adau1373->regmap, ADAU1373_DRC(nr) + i, drc[i]); in adau1373_load_drc_settings()
1354 struct adau1373_platform_data *pdata = component->dev->platform_data; in adau1373_probe()
1360 if (pdata->num_drc > ARRAY_SIZE(pdata->drc_setting)) in adau1373_probe()
1361 return -EINVAL; in adau1373_probe()
1363 if (!adau1373_valid_micbias(pdata->micbias1) || in adau1373_probe()
1364 !adau1373_valid_micbias(pdata->micbias2)) in adau1373_probe()
1365 return -EINVAL; in adau1373_probe()
1367 for (i = 0; i < pdata->num_drc; ++i) { in adau1373_probe()
1369 pdata->drc_setting[i]); in adau1373_probe()
1373 pdata->num_drc); in adau1373_probe()
1377 if (pdata->input_differential[i]) in adau1373_probe()
1380 regmap_write(adau1373->regmap, ADAU1373_INPUT_MODE, val); in adau1373_probe()
1383 if (pdata->lineout_differential) in adau1373_probe()
1385 if (pdata->lineout_ground_sense) in adau1373_probe()
1387 regmap_write(adau1373->regmap, ADAU1373_OUTPUT_CTRL, val); in adau1373_probe()
1389 lineout_differential = pdata->lineout_differential; in adau1373_probe()
1391 regmap_write(adau1373->regmap, ADAU1373_EP_CTRL, in adau1373_probe()
1392 (pdata->micbias1 << ADAU1373_EP_CTRL_MICBIAS1_OFFSET) | in adau1373_probe()
1393 (pdata->micbias2 << ADAU1373_EP_CTRL_MICBIAS2_OFFSET)); in adau1373_probe()
1401 regmap_write(adau1373->regmap, ADAU1373_ADC_CTRL, in adau1373_probe()
1418 regmap_update_bits(adau1373->regmap, ADAU1373_PWDN_CTRL3, in adau1373_set_bias_level()
1422 regmap_update_bits(adau1373->regmap, ADAU1373_PWDN_CTRL3, in adau1373_set_bias_level()
1433 regcache_sync(adau1373->regmap); in adau1373_resume()
1483 adau1373 = devm_kzalloc(&client->dev, sizeof(*adau1373), GFP_KERNEL); in adau1373_i2c_probe()
1485 return -ENOMEM; in adau1373_i2c_probe()
1487 adau1373->regmap = devm_regmap_init_i2c(client, in adau1373_i2c_probe()
1489 if (IS_ERR(adau1373->regmap)) in adau1373_i2c_probe()
1490 return PTR_ERR(adau1373->regmap); in adau1373_i2c_probe()
1492 regmap_write(adau1373->regmap, ADAU1373_SOFT_RESET, 0x00); in adau1373_i2c_probe()
1494 dev_set_drvdata(&client->dev, adau1373); in adau1373_i2c_probe()
1496 ret = devm_snd_soc_register_component(&client->dev, in adau1373_i2c_probe()
1519 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");