Lines Matching refs:pcm512x

70 	struct pcm512x_priv *pcm512x = container_of(nb, struct pcm512x_priv, \
73 regcache_mark_dirty(pcm512x->regmap); \
74 regcache_cache_only(pcm512x->regmap, true); \
233 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_pll_get() local
235 ucontrol->value.integer.value[0] = pcm512x->overclock_pll; in pcm512x_overclock_pll_get()
243 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_pll_put() local
253 pcm512x->overclock_pll = ucontrol->value.integer.value[0]; in pcm512x_overclock_pll_put()
261 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_dsp_get() local
263 ucontrol->value.integer.value[0] = pcm512x->overclock_dsp; in pcm512x_overclock_dsp_get()
271 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_dsp_put() local
281 pcm512x->overclock_dsp = ucontrol->value.integer.value[0]; in pcm512x_overclock_dsp_put()
289 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_dac_get() local
291 ucontrol->value.integer.value[0] = pcm512x->overclock_dac; in pcm512x_overclock_dac_get()
299 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_overclock_dac_put() local
309 pcm512x->overclock_dac = ucontrol->value.integer.value[0]; in pcm512x_overclock_dac_put()
442 static unsigned long pcm512x_pll_max(struct pcm512x_priv *pcm512x) in pcm512x_pll_max() argument
444 return 25000000 + 25000000 * pcm512x->overclock_pll / 100; in pcm512x_pll_max()
447 static unsigned long pcm512x_dsp_max(struct pcm512x_priv *pcm512x) in pcm512x_dsp_max() argument
449 return 50000000 + 50000000 * pcm512x->overclock_dsp / 100; in pcm512x_dsp_max()
452 static unsigned long pcm512x_dac_max(struct pcm512x_priv *pcm512x, in pcm512x_dac_max() argument
455 return rate + rate * pcm512x->overclock_dac / 100; in pcm512x_dac_max()
458 static unsigned long pcm512x_sck_max(struct pcm512x_priv *pcm512x) in pcm512x_sck_max() argument
460 if (!pcm512x->pll_out) in pcm512x_sck_max()
462 return pcm512x_pll_max(pcm512x); in pcm512x_sck_max()
465 static unsigned long pcm512x_ncp_target(struct pcm512x_priv *pcm512x, in pcm512x_ncp_target() argument
478 return pcm512x_dac_max(pcm512x, 1536000); in pcm512x_ncp_target()
494 struct pcm512x_priv *pcm512x = rule->private; in pcm512x_hw_rule_rate() local
513 ranges[0].max = pcm512x_sck_max(pcm512x) / frame_size / 2; in pcm512x_hw_rule_rate()
529 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_dai_startup_master() local
534 if (IS_ERR(pcm512x->sclk)) { in pcm512x_dai_startup_master()
536 PTR_ERR(pcm512x->sclk)); in pcm512x_dai_startup_master()
537 return PTR_ERR(pcm512x->sclk); in pcm512x_dai_startup_master()
540 if (pcm512x->pll_out) in pcm512x_dai_startup_master()
544 pcm512x, in pcm512x_dai_startup_master()
557 rats_no_pll->num = clk_get_rate(pcm512x->sclk) / 64; in pcm512x_dai_startup_master()
571 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_dai_startup_slave() local
573 struct regmap *regmap = pcm512x->regmap; in pcm512x_dai_startup_slave()
575 if (IS_ERR(pcm512x->sclk)) { in pcm512x_dai_startup_slave()
577 PTR_ERR(pcm512x->sclk)); in pcm512x_dai_startup_slave()
597 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_dai_startup() local
599 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { in pcm512x_dai_startup()
615 struct pcm512x_priv *pcm512x = dev_get_drvdata(codec->dev); in pcm512x_set_bias_level() local
624 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_set_bias_level()
634 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_set_bias_level()
654 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_find_sck() local
665 pow2 = 1 << fls((pcm512x_pll_max(pcm512x) - 16000000) / bclk_rate); in pcm512x_find_sck()
667 sck_rate = rounddown(pcm512x_pll_max(pcm512x), in pcm512x_find_sck()
700 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_find_pll_coeff() local
734 pcm512x->real_pll = pll_rate; in pcm512x_find_pll_coeff()
764 pcm512x->real_pll = pll_rate; in pcm512x_find_pll_coeff()
792 pcm512x->real_pll = DIV_ROUND_DOWN_ULL((u64)K * pllin_rate, 10000 * P); in pcm512x_find_pll_coeff()
795 pcm512x->pll_r = R; in pcm512x_find_pll_coeff()
796 pcm512x->pll_j = J; in pcm512x_find_pll_coeff()
797 pcm512x->pll_d = D; in pcm512x_find_pll_coeff()
798 pcm512x->pll_p = P; in pcm512x_find_pll_coeff()
807 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_pllin_dac_rate() local
810 if (!pcm512x->pll_out) in pcm512x_pllin_dac_rate()
817 for (dac_rate = rounddown(pcm512x_dac_max(pcm512x, 6144000), osr_rate); in pcm512x_pllin_dac_rate()
838 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_set_dividers() local
865 if (!pcm512x->pll_out) { in pcm512x_set_dividers()
866 sck_rate = clk_get_rate(pcm512x->sclk); in pcm512x_set_dividers()
883 pllin_rate = clk_get_rate(pcm512x->sclk); in pcm512x_set_dividers()
894 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
895 PCM512x_PLL_COEFF_0, pcm512x->pll_p - 1); in pcm512x_set_dividers()
901 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
902 PCM512x_PLL_COEFF_1, pcm512x->pll_j); in pcm512x_set_dividers()
908 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
909 PCM512x_PLL_COEFF_2, pcm512x->pll_d >> 8); in pcm512x_set_dividers()
915 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
916 PCM512x_PLL_COEFF_3, pcm512x->pll_d & 0xff); in pcm512x_set_dividers()
922 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
923 PCM512x_PLL_COEFF_4, pcm512x->pll_r - 1); in pcm512x_set_dividers()
929 mck_rate = pcm512x->real_pll; in pcm512x_set_dividers()
944 dsp_div = mck_rate > pcm512x_dsp_max(pcm512x) ? 2 : 1; in pcm512x_set_dividers()
954 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, in pcm512x_set_dividers()
962 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; in pcm512x_set_dividers()
963 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_DACIN, in pcm512x_set_dividers()
968 pcm512x->pll_in, ret); in pcm512x_set_dividers()
975 unsigned long dac_mul = pcm512x_dac_max(pcm512x, 6144000) in pcm512x_set_dividers()
992 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, in pcm512x_set_dividers()
1017 pcm512x_ncp_target(pcm512x, dac_rate)); in pcm512x_set_dividers()
1029 ret = regmap_write(pcm512x->regmap, PCM512x_DSP_CLKDIV, dsp_div - 1); in pcm512x_set_dividers()
1035 ret = regmap_write(pcm512x->regmap, PCM512x_DAC_CLKDIV, dac_div - 1); in pcm512x_set_dividers()
1041 ret = regmap_write(pcm512x->regmap, PCM512x_NCP_CLKDIV, ncp_div - 1); in pcm512x_set_dividers()
1047 ret = regmap_write(pcm512x->regmap, PCM512x_OSR_CLKDIV, osr_div - 1); in pcm512x_set_dividers()
1053 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
1060 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
1067 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_1, idac >> 8); in pcm512x_set_dividers()
1073 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_2, idac & 0xff); in pcm512x_set_dividers()
1079 if (sample_rate <= pcm512x_dac_max(pcm512x, 48000)) in pcm512x_set_dividers()
1081 else if (sample_rate <= pcm512x_dac_max(pcm512x, 96000)) in pcm512x_set_dividers()
1083 else if (sample_rate <= pcm512x_dac_max(pcm512x, 192000)) in pcm512x_set_dividers()
1087 ret = regmap_update_bits(pcm512x->regmap, PCM512x_FS_SPEED_MODE, in pcm512x_set_dividers()
1111 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_hw_params() local
1141 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { in pcm512x_hw_params()
1143 ret = regmap_update_bits(pcm512x->regmap, in pcm512x_hw_params()
1154 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1175 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_1, in pcm512x_hw_params()
1182 if (pcm512x->pll_out) { in pcm512x_hw_params()
1183 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_A, 0x11); in pcm512x_hw_params()
1189 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_B, 0xff); in pcm512x_hw_params()
1195 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1210 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1225 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, in pcm512x_hw_params()
1237 if (pcm512x->pll_out) { in pcm512x_hw_params()
1238 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_REF, in pcm512x_hw_params()
1246 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; in pcm512x_hw_params()
1247 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_PLLIN, in pcm512x_hw_params()
1252 pcm512x->pll_in, ret); in pcm512x_hw_params()
1256 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, in pcm512x_hw_params()
1264 ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG, in pcm512x_hw_params()
1272 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE, in pcm512x_hw_params()
1280 if (pcm512x->pll_out) { in pcm512x_hw_params()
1281 gpio = PCM512x_G1OE << (pcm512x->pll_out - 1); in pcm512x_hw_params()
1282 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_EN, in pcm512x_hw_params()
1286 pcm512x->pll_out, ret); in pcm512x_hw_params()
1290 gpio = PCM512x_GPIO_OUTPUT_1 + pcm512x->pll_out - 1; in pcm512x_hw_params()
1291 ret = regmap_update_bits(pcm512x->regmap, gpio, in pcm512x_hw_params()
1295 ret, pcm512x->pll_out); in pcm512x_hw_params()
1300 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, in pcm512x_hw_params()
1307 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, in pcm512x_hw_params()
1320 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); in pcm512x_set_fmt() local
1322 pcm512x->fmt = fmt; in pcm512x_set_fmt()
1388 struct pcm512x_priv *pcm512x; in pcm512x_probe() local
1391 pcm512x = devm_kzalloc(dev, sizeof(struct pcm512x_priv), GFP_KERNEL); in pcm512x_probe()
1392 if (!pcm512x) in pcm512x_probe()
1395 dev_set_drvdata(dev, pcm512x); in pcm512x_probe()
1396 pcm512x->regmap = regmap; in pcm512x_probe()
1398 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) in pcm512x_probe()
1399 pcm512x->supplies[i].supply = pcm512x_supply_names[i]; in pcm512x_probe()
1401 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1402 pcm512x->supplies); in pcm512x_probe()
1408 pcm512x->supply_nb[0].notifier_call = pcm512x_regulator_event_0; in pcm512x_probe()
1409 pcm512x->supply_nb[1].notifier_call = pcm512x_regulator_event_1; in pcm512x_probe()
1410 pcm512x->supply_nb[2].notifier_call = pcm512x_regulator_event_2; in pcm512x_probe()
1412 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) { in pcm512x_probe()
1413 ret = regulator_register_notifier(pcm512x->supplies[i].consumer, in pcm512x_probe()
1414 &pcm512x->supply_nb[i]); in pcm512x_probe()
1422 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1423 pcm512x->supplies); in pcm512x_probe()
1443 pcm512x->sclk = devm_clk_get(dev, NULL); in pcm512x_probe()
1444 if (PTR_ERR(pcm512x->sclk) == -EPROBE_DEFER) in pcm512x_probe()
1446 if (!IS_ERR(pcm512x->sclk)) { in pcm512x_probe()
1447 ret = clk_prepare_enable(pcm512x->sclk); in pcm512x_probe()
1455 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_probe()
1478 pcm512x->pll_in = val; in pcm512x_probe()
1487 pcm512x->pll_out = val; in pcm512x_probe()
1490 if (!pcm512x->pll_in != !pcm512x->pll_out) { in pcm512x_probe()
1496 if (pcm512x->pll_in && pcm512x->pll_in == pcm512x->pll_out) { in pcm512x_probe()
1516 if (!IS_ERR(pcm512x->sclk)) in pcm512x_probe()
1517 clk_disable_unprepare(pcm512x->sclk); in pcm512x_probe()
1519 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1520 pcm512x->supplies); in pcm512x_probe()
1527 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); in pcm512x_remove() local
1531 if (!IS_ERR(pcm512x->sclk)) in pcm512x_remove()
1532 clk_disable_unprepare(pcm512x->sclk); in pcm512x_remove()
1533 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_remove()
1534 pcm512x->supplies); in pcm512x_remove()
1541 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); in pcm512x_suspend() local
1544 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_suspend()
1551 ret = regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_suspend()
1552 pcm512x->supplies); in pcm512x_suspend()
1558 if (!IS_ERR(pcm512x->sclk)) in pcm512x_suspend()
1559 clk_disable_unprepare(pcm512x->sclk); in pcm512x_suspend()
1566 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); in pcm512x_resume() local
1569 if (!IS_ERR(pcm512x->sclk)) { in pcm512x_resume()
1570 ret = clk_prepare_enable(pcm512x->sclk); in pcm512x_resume()
1577 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_resume()
1578 pcm512x->supplies); in pcm512x_resume()
1584 regcache_cache_only(pcm512x->regmap, false); in pcm512x_resume()
1585 ret = regcache_sync(pcm512x->regmap); in pcm512x_resume()
1591 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_resume()