• Home
  • Raw
  • Download

Lines Matching +full:spk +full:- +full:fmt

2  * rt5660.c  --  RT5660 ALSA SoC audio codec driver
29 #include <sound/soc-dapm.h>
301 static const DECLARE_TLV_DB_SCALE(rt5660_out_vol_tlv, -4650, 150, 0);
302 static const DECLARE_TLV_DB_SCALE(rt5660_dac_vol_tlv, -6525, 75, 0);
303 static const DECLARE_TLV_DB_SCALE(rt5660_adc_vol_tlv, -1725, 75, 0);
305 static const DECLARE_TLV_DB_SCALE(rt5660_bst_tlv, -1200, 75, 0);
347 * rt5660_set_dmic_clk - Set parameter of dmic.
357 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5660_set_dmic_clk()
361 rate = rt5660->sysclk / rl6231_get_pre_div(rt5660->regmap, in rt5660_set_dmic_clk()
365 dev_err(component->dev, "Failed to set DMIC clock\n"); in rt5660_set_dmic_clk()
376 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in rt5660_is_sys_clk_from_pll()
544 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5660_lout_event()
671 SND_SOC_DAPM_MIXER("SPK MIX", RT5660_PWR_MIXER, RT5660_PWR_SM_BIT,
700 SND_SOC_DAPM_PGA_S("SPK amp", 1, RT5660_PWR_DIG1,
792 { "SPK MIX", "BST3 Switch", "BST3" },
793 { "SPK MIX", "BST1 Switch", "BST1" },
794 { "SPK MIX", "DACL Switch", "DAC L1" },
795 { "SPK MIX", "DACR Switch", "DAC R1" },
796 { "SPK MIX", "OUTMIXL Switch", "OUT MIXL" },
816 { "SPKVOL", "Switch", "SPK MIX" },
834 { "SPK amp", NULL, "SPO MIX" },
835 { "SPO", NULL, "SPK amp" },
841 struct snd_soc_component *component = dai->component; in rt5660_hw_params()
846 rt5660->lrck[dai->id] = params_rate(params); in rt5660_hw_params()
847 pre_div = rl6231_get_clk_info(rt5660->sysclk, rt5660->lrck[dai->id]); in rt5660_hw_params()
849 dev_err(component->dev, "Unsupported clock setting %d for DAI %d\n", in rt5660_hw_params()
850 rt5660->lrck[dai->id], dai->id); in rt5660_hw_params()
851 return -EINVAL; in rt5660_hw_params()
856 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size); in rt5660_hw_params()
865 rt5660->bclk[dai->id] = rt5660->lrck[dai->id] * (32 << bclk_ms); in rt5660_hw_params()
867 dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n", in rt5660_hw_params()
868 rt5660->bclk[dai->id], rt5660->lrck[dai->id]); in rt5660_hw_params()
869 dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n", in rt5660_hw_params()
870 bclk_ms, pre_div, dai->id); in rt5660_hw_params()
885 return -EINVAL; in rt5660_hw_params()
888 switch (dai->id) { in rt5660_hw_params()
899 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5660_hw_params()
900 return -EINVAL; in rt5660_hw_params()
906 static int rt5660_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) in rt5660_set_dai_fmt() argument
908 struct snd_soc_component *component = dai->component; in rt5660_set_dai_fmt()
912 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { in rt5660_set_dai_fmt()
914 rt5660->master[dai->id] = 1; in rt5660_set_dai_fmt()
919 rt5660->master[dai->id] = 0; in rt5660_set_dai_fmt()
923 return -EINVAL; in rt5660_set_dai_fmt()
926 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { in rt5660_set_dai_fmt()
935 return -EINVAL; in rt5660_set_dai_fmt()
938 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { in rt5660_set_dai_fmt()
955 return -EINVAL; in rt5660_set_dai_fmt()
958 switch (dai->id) { in rt5660_set_dai_fmt()
966 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5660_set_dai_fmt()
967 return -EINVAL; in rt5660_set_dai_fmt()
976 struct snd_soc_component *component = dai->component; in rt5660_set_dai_sysclk()
980 if (freq == rt5660->sysclk && clk_id == rt5660->sysclk_src) in rt5660_set_dai_sysclk()
997 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5660_set_dai_sysclk()
998 return -EINVAL; in rt5660_set_dai_sysclk()
1004 rt5660->sysclk = freq; in rt5660_set_dai_sysclk()
1005 rt5660->sysclk_src = clk_id; in rt5660_set_dai_sysclk()
1007 dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); in rt5660_set_dai_sysclk()
1015 struct snd_soc_component *component = dai->component; in rt5660_set_dai_pll()
1020 if (source == rt5660->pll_src && freq_in == rt5660->pll_in && in rt5660_set_dai_pll()
1021 freq_out == rt5660->pll_out) in rt5660_set_dai_pll()
1025 dev_dbg(component->dev, "PLL disabled\n"); in rt5660_set_dai_pll()
1027 rt5660->pll_in = 0; in rt5660_set_dai_pll()
1028 rt5660->pll_out = 0; in rt5660_set_dai_pll()
1046 dev_err(component->dev, "Unknown PLL source %d\n", source); in rt5660_set_dai_pll()
1047 return -EINVAL; in rt5660_set_dai_pll()
1052 dev_err(component->dev, "Unsupport input clock %d\n", freq_in); in rt5660_set_dai_pll()
1056 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n", in rt5660_set_dai_pll()
1066 rt5660->pll_in = freq_in; in rt5660_set_dai_pll()
1067 rt5660->pll_out = freq_out; in rt5660_set_dai_pll()
1068 rt5660->pll_src = source; in rt5660_set_dai_pll()
1087 if (IS_ERR(rt5660->mclk)) in rt5660_set_bias_level()
1091 clk_disable_unprepare(rt5660->mclk); in rt5660_set_bias_level()
1093 ret = clk_prepare_enable(rt5660->mclk); in rt5660_set_bias_level()
1129 rt5660->component = component; in rt5660_probe()
1144 regcache_cache_only(rt5660->regmap, true); in rt5660_suspend()
1145 regcache_mark_dirty(rt5660->regmap); in rt5660_suspend()
1154 if (rt5660->pdata.poweroff_codec_in_suspend) in rt5660_resume()
1157 regcache_cache_only(rt5660->regmap, false); in rt5660_resume()
1158 regcache_sync(rt5660->regmap); in rt5660_resume()
1180 .name = "rt5660-aif1",
1254 rt5660->pdata.in1_diff = device_property_read_bool(dev, in rt5660_parse_dt()
1255 "realtek,in1-differential"); in rt5660_parse_dt()
1256 rt5660->pdata.in3_diff = device_property_read_bool(dev, in rt5660_parse_dt()
1257 "realtek,in3-differential"); in rt5660_parse_dt()
1258 rt5660->pdata.poweroff_codec_in_suspend = device_property_read_bool(dev, in rt5660_parse_dt()
1259 "realtek,poweroff-in-suspend"); in rt5660_parse_dt()
1260 device_property_read_u32(dev, "realtek,dmic1-data-pin", in rt5660_parse_dt()
1261 &rt5660->pdata.dmic1_data_pin); in rt5660_parse_dt()
1269 struct rt5660_platform_data *pdata = dev_get_platdata(&i2c->dev); in rt5660_i2c_probe()
1274 rt5660 = devm_kzalloc(&i2c->dev, sizeof(struct rt5660_priv), in rt5660_i2c_probe()
1278 return -ENOMEM; in rt5660_i2c_probe()
1281 rt5660->mclk = devm_clk_get(&i2c->dev, "mclk"); in rt5660_i2c_probe()
1282 if (PTR_ERR(rt5660->mclk) == -EPROBE_DEFER) in rt5660_i2c_probe()
1283 return -EPROBE_DEFER; in rt5660_i2c_probe()
1288 rt5660->pdata = *pdata; in rt5660_i2c_probe()
1289 else if (i2c->dev.of_node) in rt5660_i2c_probe()
1290 rt5660_parse_dt(rt5660, &i2c->dev); in rt5660_i2c_probe()
1292 rt5660->regmap = devm_regmap_init_i2c(i2c, &rt5660_regmap); in rt5660_i2c_probe()
1293 if (IS_ERR(rt5660->regmap)) { in rt5660_i2c_probe()
1294 ret = PTR_ERR(rt5660->regmap); in rt5660_i2c_probe()
1295 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5660_i2c_probe()
1300 regmap_read(rt5660->regmap, RT5660_VENDOR_ID2, &val); in rt5660_i2c_probe()
1302 dev_err(&i2c->dev, in rt5660_i2c_probe()
1304 return -ENODEV; in rt5660_i2c_probe()
1307 regmap_write(rt5660->regmap, RT5660_RESET, 0); in rt5660_i2c_probe()
1309 ret = regmap_register_patch(rt5660->regmap, rt5660_patch, in rt5660_i2c_probe()
1312 dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret); in rt5660_i2c_probe()
1314 regmap_update_bits(rt5660->regmap, RT5660_GEN_CTRL1, in rt5660_i2c_probe()
1318 if (rt5660->pdata.dmic1_data_pin) { in rt5660_i2c_probe()
1319 regmap_update_bits(rt5660->regmap, RT5660_GPIO_CTRL1, in rt5660_i2c_probe()
1322 if (rt5660->pdata.dmic1_data_pin == RT5660_DMIC1_DATA_GPIO2) in rt5660_i2c_probe()
1323 regmap_update_bits(rt5660->regmap, RT5660_DMIC_CTRL1, in rt5660_i2c_probe()
1326 else if (rt5660->pdata.dmic1_data_pin == RT5660_DMIC1_DATA_IN1P) in rt5660_i2c_probe()
1327 regmap_update_bits(rt5660->regmap, RT5660_DMIC_CTRL1, in rt5660_i2c_probe()
1332 return devm_snd_soc_register_component(&i2c->dev, in rt5660_i2c_probe()