Lines Matching defs:pcm512x

23 #include "pcm512x.h"
62 struct pcm512x_priv *pcm512x = container_of(nb, struct pcm512x_priv, \
65 regcache_mark_dirty(pcm512x->regmap); \
66 regcache_cache_only(pcm512x->regmap, true); \
227 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
229 ucontrol->value.integer.value[0] = pcm512x->overclock_pll;
237 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
247 pcm512x->overclock_pll = ucontrol->value.integer.value[0];
255 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
257 ucontrol->value.integer.value[0] = pcm512x->overclock_dsp;
265 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
275 pcm512x->overclock_dsp = ucontrol->value.integer.value[0];
283 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
285 ucontrol->value.integer.value[0] = pcm512x->overclock_dac;
293 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
303 pcm512x->overclock_dac = ucontrol->value.integer.value[0];
384 static int pcm512x_update_mute(struct pcm512x_priv *pcm512x)
387 pcm512x->regmap, PCM512x_MUTE, PCM512x_RQML | PCM512x_RQMR,
388 (!!(pcm512x->mute & 0x5) << PCM512x_RQML_SHIFT)
389 | (!!(pcm512x->mute & 0x3) << PCM512x_RQMR_SHIFT));
396 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
398 mutex_lock(&pcm512x->mutex);
399 ucontrol->value.integer.value[0] = !(pcm512x->mute & 0x4);
400 ucontrol->value.integer.value[1] = !(pcm512x->mute & 0x2);
401 mutex_unlock(&pcm512x->mutex);
410 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
413 mutex_lock(&pcm512x->mutex);
415 if ((pcm512x->mute & 0x4) == (ucontrol->value.integer.value[0] << 2)) {
416 pcm512x->mute ^= 0x4;
419 if ((pcm512x->mute & 0x2) == (ucontrol->value.integer.value[1] << 1)) {
420 pcm512x->mute ^= 0x2;
425 ret = pcm512x_update_mute(pcm512x);
429 mutex_unlock(&pcm512x->mutex);
434 mutex_unlock(&pcm512x->mutex);
498 static unsigned long pcm512x_pll_max(struct pcm512x_priv *pcm512x)
500 return 25000000 + 25000000 * pcm512x->overclock_pll / 100;
503 static unsigned long pcm512x_dsp_max(struct pcm512x_priv *pcm512x)
505 return 50000000 + 50000000 * pcm512x->overclock_dsp / 100;
508 static unsigned long pcm512x_dac_max(struct pcm512x_priv *pcm512x,
511 return rate + rate * pcm512x->overclock_dac / 100;
514 static unsigned long pcm512x_sck_max(struct pcm512x_priv *pcm512x)
516 if (!pcm512x->pll_out)
518 return pcm512x_pll_max(pcm512x);
521 static unsigned long pcm512x_ncp_target(struct pcm512x_priv *pcm512x,
534 return pcm512x_dac_max(pcm512x, 1536000);
550 struct pcm512x_priv *pcm512x = rule->private;
569 ranges[0].max = pcm512x_sck_max(pcm512x) / frame_size / 2;
585 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
590 if (IS_ERR(pcm512x->sclk)) {
592 PTR_ERR(pcm512x->sclk));
593 return PTR_ERR(pcm512x->sclk);
596 if (pcm512x->pll_out)
600 pcm512x,
613 rats_no_pll->num = clk_get_rate(pcm512x->sclk) / 64;
627 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
629 struct regmap *regmap = pcm512x->regmap;
631 if (IS_ERR(pcm512x->sclk)) {
633 PTR_ERR(pcm512x->sclk));
653 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
655 switch (pcm512x->fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
671 struct pcm512x_priv *pcm512x = dev_get_drvdata(component->dev);
680 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER,
690 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER,
708 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
719 pow2 = 1 << fls((pcm512x_pll_max(pcm512x) - 16000000) / bclk_rate);
721 sck_rate = rounddown(pcm512x_pll_max(pcm512x),
754 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
788 pcm512x->real_pll = pll_rate;
818 pcm512x->real_pll = pll_rate;
846 pcm512x->real_pll = DIV_ROUND_DOWN_ULL((u64)K * pllin_rate, 10000 * P);
849 pcm512x->pll_r = R;
850 pcm512x->pll_j = J;
851 pcm512x->pll_d = D;
852 pcm512x->pll_p = P;
861 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
864 if (!pcm512x->pll_out)
871 for (dac_rate = rounddown(pcm512x_dac_max(pcm512x, 6144000), osr_rate);
892 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
913 if (pcm512x->bclk_ratio > 0) {
914 lrclk_div = pcm512x->bclk_ratio;
924 if (!pcm512x->pll_out) {
925 sck_rate = clk_get_rate(pcm512x->sclk);
942 pllin_rate = clk_get_rate(pcm512x->sclk);
953 ret = regmap_write(pcm512x->regmap,
954 PCM512x_PLL_COEFF_0, pcm512x->pll_p - 1);
960 ret = regmap_write(pcm512x->regmap,
961 PCM512x_PLL_COEFF_1, pcm512x->pll_j);
967 ret = regmap_write(pcm512x->regmap,
968 PCM512x_PLL_COEFF_2, pcm512x->pll_d >> 8);
974 ret = regmap_write(pcm512x->regmap,
975 PCM512x_PLL_COEFF_3, pcm512x->pll_d & 0xff);
981 ret = regmap_write(pcm512x->regmap,
982 PCM512x_PLL_COEFF_4, pcm512x->pll_r - 1);
988 mck_rate = pcm512x->real_pll;
1003 dsp_div = mck_rate > pcm512x_dsp_max(pcm512x) ? 2 : 1;
1013 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF,
1021 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1;
1022 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_DACIN,
1027 pcm512x->pll_in, ret);
1034 unsigned long dac_mul = pcm512x_dac_max(pcm512x, 6144000)
1051 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF,
1076 pcm512x_ncp_target(pcm512x, dac_rate));
1088 ret = regmap_write(pcm512x->regmap, PCM512x_DSP_CLKDIV, dsp_div - 1);
1094 ret = regmap_write(pcm512x->regmap, PCM512x_DAC_CLKDIV, dac_div - 1);
1100 ret = regmap_write(pcm512x->regmap, PCM512x_NCP_CLKDIV, ncp_div - 1);
1106 ret = regmap_write(pcm512x->regmap, PCM512x_OSR_CLKDIV, osr_div - 1);
1112 ret = regmap_write(pcm512x->regmap,
1119 ret = regmap_write(pcm512x->regmap,
1126 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_1, idac >> 8);
1132 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_2, idac & 0xff);
1138 if (sample_rate <= pcm512x_dac_max(pcm512x, 48000))
1140 else if (sample_rate <= pcm512x_dac_max(pcm512x, 96000))
1142 else if (sample_rate <= pcm512x_dac_max(pcm512x, 192000))
1146 ret = regmap_update_bits(pcm512x->regmap, PCM512x_FS_SPEED_MODE,
1170 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
1198 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_1,
1205 if ((pcm512x->fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) ==
1207 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT,
1218 if (pcm512x->pll_out) {
1219 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_A, 0x11);
1225 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_B, 0xff);
1231 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT,
1246 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT,
1261 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN,
1273 if (pcm512x->pll_out) {
1274 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_REF,
1282 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1;
1283 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_PLLIN,
1288 pcm512x->pll_in, ret);
1292 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN,
1299 gpio = PCM512x_G1OE << (pcm512x->pll_out - 1);
1300 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_EN,
1304 pcm512x->pll_out, ret);
1308 gpio = PCM512x_GPIO_OUTPUT_1 + pcm512x->pll_out - 1;
1309 ret = regmap_update_bits(pcm512x->regmap, gpio,
1313 ret, pcm512x->pll_out);
1318 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE,
1325 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE,
1339 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
1363 ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG,
1371 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE,
1397 pcm512x->fmt);
1401 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_1,
1408 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_2,
1415 pcm512x->fmt = fmt;
1423 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
1428 pcm512x->bclk_ratio = ratio;
1436 struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
1440 mutex_lock(&pcm512x->mutex);
1443 pcm512x->mute |= 0x1;
1444 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MUTE,
1453 regmap_read_poll_timeout(pcm512x->regmap,
1458 pcm512x->mute &= ~0x1;
1459 ret = pcm512x_update_mute(pcm512x);
1466 regmap_read_poll_timeout(pcm512x->regmap,
1470 == ((~pcm512x->mute >> 1) & 0x3),
1475 mutex_unlock(&pcm512x->mutex);
1490 .name = "pcm512x-hifi",
1544 struct pcm512x_priv *pcm512x;
1547 pcm512x = devm_kzalloc(dev, sizeof(struct pcm512x_priv), GFP_KERNEL);
1548 if (!pcm512x)
1551 mutex_init(&pcm512x->mutex);
1553 dev_set_drvdata(dev, pcm512x);
1554 pcm512x->regmap = regmap;
1556 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++)
1557 pcm512x->supplies[i].supply = pcm512x_supply_names[i];
1559 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(pcm512x->supplies),
1560 pcm512x->supplies);
1566 pcm512x->supply_nb[0].notifier_call = pcm512x_regulator_event_0;
1567 pcm512x->supply_nb[1].notifier_call = pcm512x_regulator_event_1;
1568 pcm512x->supply_nb[2].notifier_call = pcm512x_regulator_event_2;
1570 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) {
1572 pcm512x->supplies[i].consumer,
1573 &pcm512x->supply_nb[i]);
1581 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies),
1582 pcm512x->supplies);
1602 pcm512x->sclk = devm_clk_get(dev, NULL);
1603 if (PTR_ERR(pcm512x->sclk) == -EPROBE_DEFER) {
1607 if (!IS_ERR(pcm512x->sclk)) {
1608 ret = clk_prepare_enable(pcm512x->sclk);
1616 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER,
1639 pcm512x->pll_in = val;
1648 pcm512x->pll_out = val;
1651 if (!pcm512x->pll_in != !pcm512x->pll_out) {
1657 if (pcm512x->pll_in && pcm512x->pll_in == pcm512x->pll_out) {
1677 if (!IS_ERR(pcm512x->sclk))
1678 clk_disable_unprepare(pcm512x->sclk);
1680 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies),
1681 pcm512x->supplies);
1688 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev);
1691 if (!IS_ERR(pcm512x->sclk))
1692 clk_disable_unprepare(pcm512x->sclk);
1693 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies),
1694 pcm512x->supplies);
1701 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev);
1704 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER,
1711 ret = regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies),
1712 pcm512x->supplies);
1718 if (!IS_ERR(pcm512x->sclk))
1719 clk_disable_unprepare(pcm512x->sclk);
1726 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev);
1729 if (!IS_ERR(pcm512x->sclk)) {
1730 ret = clk_prepare_enable(pcm512x->sclk);
1737 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies),
1738 pcm512x->supplies);
1744 regcache_cache_only(pcm512x->regmap, false);
1745 ret = regcache_sync(pcm512x->regmap);
1751 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER,