• Home
  • Raw
  • Download

Lines Matching +full:vref +full:- +full:p +full:- +full:supply

1 // SPDX-License-Identifier: GPL-2.0-only
19 #include <sound/soc-dapm.h>
54 * We can't use the same notifier block for more than one supply and
65 regcache_mark_dirty(pcm512x->regmap); \
66 regcache_cache_only(pcm512x->regmap, true); \
227 ucontrol->value.integer.value[0] = pcm512x->overclock_pll; in pcm512x_overclock_pll_get()
242 return -EBUSY; in pcm512x_overclock_pll_put()
245 pcm512x->overclock_pll = ucontrol->value.integer.value[0]; in pcm512x_overclock_pll_put()
255 ucontrol->value.integer.value[0] = pcm512x->overclock_dsp; in pcm512x_overclock_dsp_get()
270 return -EBUSY; in pcm512x_overclock_dsp_put()
273 pcm512x->overclock_dsp = ucontrol->value.integer.value[0]; in pcm512x_overclock_dsp_put()
283 ucontrol->value.integer.value[0] = pcm512x->overclock_dac; in pcm512x_overclock_dac_get()
298 return -EBUSY; in pcm512x_overclock_dac_put()
301 pcm512x->overclock_dac = ucontrol->value.integer.value[0]; in pcm512x_overclock_dac_put()
305 static const DECLARE_TLV_DB_SCALE(digital_tlv, -10350, 50, 1);
306 static const DECLARE_TLV_DB_SCALE(analog_tlv, -600, 600, 0);
310 "FIR interpolation with de-emphasis",
311 "Low latency IIR with de-emphasis",
312 "High attenuation with de-emphasis",
314 "Ringing-less low latency FIR",
385 pcm512x->regmap, PCM512x_MUTE, PCM512x_RQML | PCM512x_RQMR, in pcm512x_update_mute()
386 (!!(pcm512x->mute & 0x5) << PCM512x_RQML_SHIFT) in pcm512x_update_mute()
387 | (!!(pcm512x->mute & 0x3) << PCM512x_RQMR_SHIFT)); in pcm512x_update_mute()
396 mutex_lock(&pcm512x->mutex); in pcm512x_digital_playback_switch_get()
397 ucontrol->value.integer.value[0] = !(pcm512x->mute & 0x4); in pcm512x_digital_playback_switch_get()
398 ucontrol->value.integer.value[1] = !(pcm512x->mute & 0x2); in pcm512x_digital_playback_switch_get()
399 mutex_unlock(&pcm512x->mutex); in pcm512x_digital_playback_switch_get()
411 mutex_lock(&pcm512x->mutex); in pcm512x_digital_playback_switch_put()
413 if ((pcm512x->mute & 0x4) == (ucontrol->value.integer.value[0] << 2)) { in pcm512x_digital_playback_switch_put()
414 pcm512x->mute ^= 0x4; in pcm512x_digital_playback_switch_put()
417 if ((pcm512x->mute & 0x2) == (ucontrol->value.integer.value[1] << 1)) { in pcm512x_digital_playback_switch_put()
418 pcm512x->mute ^= 0x2; in pcm512x_digital_playback_switch_put()
425 dev_err(component->dev, in pcm512x_digital_playback_switch_put()
427 mutex_unlock(&pcm512x->mutex); in pcm512x_digital_playback_switch_put()
432 mutex_unlock(&pcm512x->mutex); in pcm512x_digital_playback_switch_put()
498 return 25000000 + 25000000 * pcm512x->overclock_pll / 100; in pcm512x_pll_max()
503 return 50000000 + 50000000 * pcm512x->overclock_dsp / 100; in pcm512x_dsp_max()
509 return rate + rate * pcm512x->overclock_dac / 100; in pcm512x_dac_max()
514 if (!pcm512x->pll_out) in pcm512x_sck_max()
548 struct pcm512x_priv *pcm512x = rule->private; in pcm512x_hw_rule_rate()
572 return -EINVAL; in pcm512x_hw_rule_rate()
575 return snd_interval_ranges(hw_param_interval(params, rule->var), in pcm512x_hw_rule_rate()
582 struct snd_soc_component *component = dai->component; in pcm512x_dai_startup_master()
584 struct device *dev = dai->dev; in pcm512x_dai_startup_master()
588 if (IS_ERR(pcm512x->sclk)) { in pcm512x_dai_startup_master()
590 PTR_ERR(pcm512x->sclk)); in pcm512x_dai_startup_master()
591 return PTR_ERR(pcm512x->sclk); in pcm512x_dai_startup_master()
594 if (pcm512x->pll_out) in pcm512x_dai_startup_master()
595 return snd_pcm_hw_rule_add(substream->runtime, 0, in pcm512x_dai_startup_master()
600 SNDRV_PCM_HW_PARAM_CHANNELS, -1); in pcm512x_dai_startup_master()
605 return -ENOMEM; in pcm512x_dai_startup_master()
606 constraints_no_pll->nrats = 1; in pcm512x_dai_startup_master()
609 return -ENOMEM; in pcm512x_dai_startup_master()
610 constraints_no_pll->rats = rats_no_pll; in pcm512x_dai_startup_master()
611 rats_no_pll->num = clk_get_rate(pcm512x->sclk) / 64; in pcm512x_dai_startup_master()
612 rats_no_pll->den_min = 1; in pcm512x_dai_startup_master()
613 rats_no_pll->den_max = 128; in pcm512x_dai_startup_master()
614 rats_no_pll->den_step = 1; in pcm512x_dai_startup_master()
616 return snd_pcm_hw_constraint_ratnums(substream->runtime, 0, in pcm512x_dai_startup_master()
624 struct snd_soc_component *component = dai->component; in pcm512x_dai_startup_slave()
626 struct device *dev = dai->dev; in pcm512x_dai_startup_slave()
627 struct regmap *regmap = pcm512x->regmap; in pcm512x_dai_startup_slave()
629 if (IS_ERR(pcm512x->sclk)) { in pcm512x_dai_startup_slave()
631 PTR_ERR(pcm512x->sclk)); in pcm512x_dai_startup_slave()
642 return snd_pcm_hw_constraint_list(substream->runtime, 0, in pcm512x_dai_startup_slave()
650 struct snd_soc_component *component = dai->component; in pcm512x_dai_startup()
653 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { in pcm512x_dai_startup()
662 return -EINVAL; in pcm512x_dai_startup()
669 struct pcm512x_priv *pcm512x = dev_get_drvdata(component->dev); in pcm512x_set_bias_level()
678 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_set_bias_level()
681 dev_err(component->dev, "Failed to remove standby: %d\n", in pcm512x_set_bias_level()
688 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_set_bias_level()
691 dev_err(component->dev, "Failed to request standby: %d\n", in pcm512x_set_bias_level()
704 struct device *dev = dai->dev; in pcm512x_find_sck()
705 struct snd_soc_component *component = dai->component; in pcm512x_find_sck()
710 /* 64 MHz <= pll_rate <= 100 MHz, VREF mode */ in pcm512x_find_sck()
711 /* 16 MHz <= sck_rate <= 25 MHz, VREF mode */ in pcm512x_find_sck()
717 pow2 = 1 << fls((pcm512x_pll_max(pcm512x) - 16000000) / bclk_rate); in pcm512x_find_sck()
733 /* pll_rate = pllin_rate * R * J.D / P
737 * 1 <= P <= 15
740 * 1 MHz <= pllin_rate / P <= 20 MHz
742 * 6.667 MHz <= pllin_rate / P <= 20 MHz
750 struct device *dev = dai->dev; in pcm512x_find_pll_coeff()
751 struct snd_soc_component *component = dai->component; in pcm512x_find_pll_coeff()
754 int R, J, D, P; in pcm512x_find_pll_coeff() local
765 /* pllin_rate / P (or here, den) cannot be greater than 20 MHz */ in pcm512x_find_pll_coeff()
772 P = den; in pcm512x_find_pll_coeff()
774 && 1000000 <= pllin_rate / P && pllin_rate / P <= 20000000) { in pcm512x_find_pll_coeff()
778 for (R = 16; R; R--) { in pcm512x_find_pll_coeff()
785 dev_dbg(dev, "R * J / P = %d * %d / %d\n", R, J, P); in pcm512x_find_pll_coeff()
786 pcm512x->real_pll = pll_rate; in pcm512x_find_pll_coeff()
803 for (P = den; P <= 15; P++) { in pcm512x_find_pll_coeff()
804 if (pllin_rate / P < 6667000 || 200000000 < pllin_rate / P) in pcm512x_find_pll_coeff()
806 if (num * P % den) in pcm512x_find_pll_coeff()
808 K = num * P / den; in pcm512x_find_pll_coeff()
815 dev_dbg(dev, "J.D / P = %d.%04d / %d\n", J, D, P); in pcm512x_find_pll_coeff()
816 pcm512x->real_pll = pll_rate; in pcm512x_find_pll_coeff()
823 /* find smallest possible P */ in pcm512x_find_pll_coeff()
824 P = DIV_ROUND_UP(pllin_rate, 20000000); in pcm512x_find_pll_coeff()
825 if (!P) in pcm512x_find_pll_coeff()
826 P = 1; in pcm512x_find_pll_coeff()
827 else if (P > 15) { in pcm512x_find_pll_coeff()
828 dev_err(dev, "Need a slower clock as pll-input\n"); in pcm512x_find_pll_coeff()
829 return -EINVAL; in pcm512x_find_pll_coeff()
831 if (pllin_rate / P < 6667000) { in pcm512x_find_pll_coeff()
832 dev_err(dev, "Need a faster clock as pll-input\n"); in pcm512x_find_pll_coeff()
833 return -EINVAL; in pcm512x_find_pll_coeff()
835 K = DIV_ROUND_CLOSEST_ULL(10000ULL * pll_rate * P, pllin_rate); in pcm512x_find_pll_coeff()
843 dev_dbg(dev, "J.D / P ~ %d.%04d / %d\n", J, D, P); in pcm512x_find_pll_coeff()
844 pcm512x->real_pll = DIV_ROUND_DOWN_ULL((u64)K * pllin_rate, 10000 * P); in pcm512x_find_pll_coeff()
847 pcm512x->pll_r = R; in pcm512x_find_pll_coeff()
848 pcm512x->pll_j = J; in pcm512x_find_pll_coeff()
849 pcm512x->pll_d = D; in pcm512x_find_pll_coeff()
850 pcm512x->pll_p = P; in pcm512x_find_pll_coeff()
858 struct snd_soc_component *component = dai->component; in pcm512x_pllin_dac_rate()
862 if (!pcm512x->pll_out) in pcm512x_pllin_dac_rate()
871 dac_rate -= osr_rate) { in pcm512x_pllin_dac_rate()
879 dac_rate -= osr_rate; in pcm512x_pllin_dac_rate()
888 struct device *dev = dai->dev; in pcm512x_set_dividers()
889 struct snd_soc_component *component = dai->component; in pcm512x_set_dividers()
911 if (pcm512x->bclk_ratio > 0) { in pcm512x_set_dividers()
912 lrclk_div = pcm512x->bclk_ratio; in pcm512x_set_dividers()
918 return -EINVAL; in pcm512x_set_dividers()
922 if (!pcm512x->pll_out) { in pcm512x_set_dividers()
923 sck_rate = clk_get_rate(pcm512x->sclk); in pcm512x_set_dividers()
936 return -EINVAL; in pcm512x_set_dividers()
940 pllin_rate = clk_get_rate(pcm512x->sclk); in pcm512x_set_dividers()
944 return -EINVAL; in pcm512x_set_dividers()
951 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
952 PCM512x_PLL_COEFF_0, pcm512x->pll_p - 1); in pcm512x_set_dividers()
954 dev_err(dev, "Failed to write PLL P: %d\n", ret); in pcm512x_set_dividers()
958 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
959 PCM512x_PLL_COEFF_1, pcm512x->pll_j); in pcm512x_set_dividers()
965 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
966 PCM512x_PLL_COEFF_2, pcm512x->pll_d >> 8); in pcm512x_set_dividers()
972 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
973 PCM512x_PLL_COEFF_3, pcm512x->pll_d & 0xff); in pcm512x_set_dividers()
979 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
980 PCM512x_PLL_COEFF_4, pcm512x->pll_r - 1); in pcm512x_set_dividers()
986 mck_rate = pcm512x->real_pll; in pcm512x_set_dividers()
993 return -EINVAL; in pcm512x_set_dividers()
1011 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, in pcm512x_set_dividers()
1014 dev_err(component->dev, in pcm512x_set_dividers()
1019 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; in pcm512x_set_dividers()
1020 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_DACIN, in pcm512x_set_dividers()
1023 dev_err(component->dev, in pcm512x_set_dividers()
1025 pcm512x->pll_in, ret); in pcm512x_set_dividers()
1036 for (; dac_mul; dac_mul--) { in pcm512x_set_dividers()
1042 return -EINVAL; in pcm512x_set_dividers()
1049 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, in pcm512x_set_dividers()
1052 dev_err(component->dev, in pcm512x_set_dividers()
1063 return -EINVAL; in pcm512x_set_dividers()
1069 return -EINVAL; in pcm512x_set_dividers()
1080 return -EINVAL; in pcm512x_set_dividers()
1086 ret = regmap_write(pcm512x->regmap, PCM512x_DSP_CLKDIV, dsp_div - 1); in pcm512x_set_dividers()
1092 ret = regmap_write(pcm512x->regmap, PCM512x_DAC_CLKDIV, dac_div - 1); in pcm512x_set_dividers()
1098 ret = regmap_write(pcm512x->regmap, PCM512x_NCP_CLKDIV, ncp_div - 1); in pcm512x_set_dividers()
1104 ret = regmap_write(pcm512x->regmap, PCM512x_OSR_CLKDIV, osr_div - 1); in pcm512x_set_dividers()
1110 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
1111 PCM512x_MASTER_CLKDIV_1, bclk_div - 1); in pcm512x_set_dividers()
1117 ret = regmap_write(pcm512x->regmap, in pcm512x_set_dividers()
1118 PCM512x_MASTER_CLKDIV_2, lrclk_div - 1); in pcm512x_set_dividers()
1124 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_1, idac >> 8); in pcm512x_set_dividers()
1130 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_2, idac & 0xff); in pcm512x_set_dividers()
1144 ret = regmap_update_bits(pcm512x->regmap, PCM512x_FS_SPEED_MODE, in pcm512x_set_dividers()
1147 dev_err(component->dev, "Failed to set fs speed: %d\n", ret); in pcm512x_set_dividers()
1151 dev_dbg(component->dev, "DSP divider %d\n", dsp_div); in pcm512x_set_dividers()
1152 dev_dbg(component->dev, "DAC divider %d\n", dac_div); in pcm512x_set_dividers()
1153 dev_dbg(component->dev, "NCP divider %d\n", ncp_div); in pcm512x_set_dividers()
1154 dev_dbg(component->dev, "OSR divider %d\n", osr_div); in pcm512x_set_dividers()
1155 dev_dbg(component->dev, "BCK divider %d\n", bclk_div); in pcm512x_set_dividers()
1156 dev_dbg(component->dev, "LRCK divider %d\n", lrclk_div); in pcm512x_set_dividers()
1157 dev_dbg(component->dev, "IDAC %d\n", idac); in pcm512x_set_dividers()
1158 dev_dbg(component->dev, "1<<FSSP %d\n", 1 << fssp); in pcm512x_set_dividers()
1167 struct snd_soc_component *component = dai->component; in pcm512x_hw_params()
1175 dev_dbg(component->dev, "hw_params %u Hz, %u channels\n", in pcm512x_hw_params()
1193 dev_err(component->dev, "Bad frame size: %d\n", in pcm512x_hw_params()
1195 return -EINVAL; in pcm512x_hw_params()
1198 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { in pcm512x_hw_params()
1200 ret = regmap_update_bits(pcm512x->regmap, in pcm512x_hw_params()
1206 dev_err(component->dev, in pcm512x_hw_params()
1211 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1214 dev_err(component->dev, in pcm512x_hw_params()
1229 return -EINVAL; in pcm512x_hw_params()
1232 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_1, in pcm512x_hw_params()
1235 dev_err(component->dev, "Failed to set frame size: %d\n", ret); in pcm512x_hw_params()
1239 if (pcm512x->pll_out) { in pcm512x_hw_params()
1240 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_A, 0x11); in pcm512x_hw_params()
1242 dev_err(component->dev, "Failed to set FLEX_A: %d\n", ret); in pcm512x_hw_params()
1246 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_B, 0xff); in pcm512x_hw_params()
1248 dev_err(component->dev, "Failed to set FLEX_B: %d\n", ret); in pcm512x_hw_params()
1252 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1261 dev_err(component->dev, in pcm512x_hw_params()
1262 "Failed to ignore auto-clock failures: %d\n", in pcm512x_hw_params()
1267 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, in pcm512x_hw_params()
1276 dev_err(component->dev, in pcm512x_hw_params()
1277 "Failed to ignore auto-clock failures: %d\n", in pcm512x_hw_params()
1282 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, in pcm512x_hw_params()
1285 dev_err(component->dev, "Failed to disable pll: %d\n", ret); in pcm512x_hw_params()
1294 if (pcm512x->pll_out) { in pcm512x_hw_params()
1295 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_REF, in pcm512x_hw_params()
1298 dev_err(component->dev, in pcm512x_hw_params()
1303 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; in pcm512x_hw_params()
1304 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_PLLIN, in pcm512x_hw_params()
1307 dev_err(component->dev, in pcm512x_hw_params()
1309 pcm512x->pll_in, ret); in pcm512x_hw_params()
1313 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, in pcm512x_hw_params()
1316 dev_err(component->dev, "Failed to enable pll: %d\n", ret); in pcm512x_hw_params()
1321 ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG, in pcm512x_hw_params()
1325 dev_err(component->dev, "Failed to enable clock output: %d\n", ret); in pcm512x_hw_params()
1329 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE, in pcm512x_hw_params()
1333 dev_err(component->dev, "Failed to enable master mode: %d\n", ret); in pcm512x_hw_params()
1337 if (pcm512x->pll_out) { in pcm512x_hw_params()
1338 gpio = PCM512x_G1OE << (pcm512x->pll_out - 1); in pcm512x_hw_params()
1339 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_EN, in pcm512x_hw_params()
1342 dev_err(component->dev, "Failed to enable gpio %d: %d\n", in pcm512x_hw_params()
1343 pcm512x->pll_out, ret); in pcm512x_hw_params()
1347 gpio = PCM512x_GPIO_OUTPUT_1 + pcm512x->pll_out - 1; in pcm512x_hw_params()
1348 ret = regmap_update_bits(pcm512x->regmap, gpio, in pcm512x_hw_params()
1351 dev_err(component->dev, "Failed to output pll on %d: %d\n", in pcm512x_hw_params()
1352 ret, pcm512x->pll_out); in pcm512x_hw_params()
1357 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, in pcm512x_hw_params()
1360 dev_err(component->dev, "Failed to halt clocks: %d\n", ret); in pcm512x_hw_params()
1364 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, in pcm512x_hw_params()
1367 dev_err(component->dev, "Failed to resume clocks: %d\n", ret); in pcm512x_hw_params()
1376 struct snd_soc_component *component = dai->component; in pcm512x_set_fmt()
1379 pcm512x->fmt = fmt; in pcm512x_set_fmt()
1386 struct snd_soc_component *component = dai->component; in pcm512x_set_bclk_ratio()
1390 return -EINVAL; in pcm512x_set_bclk_ratio()
1392 pcm512x->bclk_ratio = ratio; in pcm512x_set_bclk_ratio()
1399 struct snd_soc_component *component = dai->component; in pcm512x_mute()
1404 mutex_lock(&pcm512x->mutex); in pcm512x_mute()
1407 pcm512x->mute |= 0x1; in pcm512x_mute()
1408 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MUTE, in pcm512x_mute()
1412 dev_err(component->dev, in pcm512x_mute()
1417 regmap_read_poll_timeout(pcm512x->regmap, in pcm512x_mute()
1422 pcm512x->mute &= ~0x1; in pcm512x_mute()
1425 dev_err(component->dev, in pcm512x_mute()
1430 regmap_read_poll_timeout(pcm512x->regmap, in pcm512x_mute()
1434 == ((~pcm512x->mute >> 1) & 0x3), in pcm512x_mute()
1439 mutex_unlock(&pcm512x->mutex); in pcm512x_mute()
1454 .name = "pcm512x-hifi",
1514 return -ENOMEM; in pcm512x_probe()
1516 mutex_init(&pcm512x->mutex); in pcm512x_probe()
1519 pcm512x->regmap = regmap; in pcm512x_probe()
1521 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) in pcm512x_probe()
1522 pcm512x->supplies[i].supply = pcm512x_supply_names[i]; in pcm512x_probe()
1524 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1525 pcm512x->supplies); in pcm512x_probe()
1531 pcm512x->supply_nb[0].notifier_call = pcm512x_regulator_event_0; in pcm512x_probe()
1532 pcm512x->supply_nb[1].notifier_call = pcm512x_regulator_event_1; in pcm512x_probe()
1533 pcm512x->supply_nb[2].notifier_call = pcm512x_regulator_event_2; in pcm512x_probe()
1535 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) { in pcm512x_probe()
1537 pcm512x->supplies[i].consumer, in pcm512x_probe()
1538 &pcm512x->supply_nb[i]); in pcm512x_probe()
1546 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1547 pcm512x->supplies); in pcm512x_probe()
1567 pcm512x->sclk = devm_clk_get(dev, NULL); in pcm512x_probe()
1568 if (PTR_ERR(pcm512x->sclk) == -EPROBE_DEFER) { in pcm512x_probe()
1569 ret = -EPROBE_DEFER; in pcm512x_probe()
1572 if (!IS_ERR(pcm512x->sclk)) { in pcm512x_probe()
1573 ret = clk_prepare_enable(pcm512x->sclk); in pcm512x_probe()
1581 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_probe()
1594 if (dev->of_node) { in pcm512x_probe()
1595 const struct device_node *np = dev->of_node; in pcm512x_probe()
1598 if (of_property_read_u32(np, "pll-in", &val) >= 0) { in pcm512x_probe()
1600 dev_err(dev, "Invalid pll-in\n"); in pcm512x_probe()
1601 ret = -EINVAL; in pcm512x_probe()
1604 pcm512x->pll_in = val; in pcm512x_probe()
1607 if (of_property_read_u32(np, "pll-out", &val) >= 0) { in pcm512x_probe()
1609 dev_err(dev, "Invalid pll-out\n"); in pcm512x_probe()
1610 ret = -EINVAL; in pcm512x_probe()
1613 pcm512x->pll_out = val; in pcm512x_probe()
1616 if (!pcm512x->pll_in != !pcm512x->pll_out) { in pcm512x_probe()
1618 "Error: both pll-in and pll-out, or none\n"); in pcm512x_probe()
1619 ret = -EINVAL; in pcm512x_probe()
1622 if (pcm512x->pll_in && pcm512x->pll_in == pcm512x->pll_out) { in pcm512x_probe()
1623 dev_err(dev, "Error: pll-in == pll-out\n"); in pcm512x_probe()
1624 ret = -EINVAL; in pcm512x_probe()
1642 if (!IS_ERR(pcm512x->sclk)) in pcm512x_probe()
1643 clk_disable_unprepare(pcm512x->sclk); in pcm512x_probe()
1645 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_probe()
1646 pcm512x->supplies); in pcm512x_probe()
1656 if (!IS_ERR(pcm512x->sclk)) in pcm512x_remove()
1657 clk_disable_unprepare(pcm512x->sclk); in pcm512x_remove()
1658 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_remove()
1659 pcm512x->supplies); in pcm512x_remove()
1669 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_suspend()
1676 ret = regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_suspend()
1677 pcm512x->supplies); in pcm512x_suspend()
1683 if (!IS_ERR(pcm512x->sclk)) in pcm512x_suspend()
1684 clk_disable_unprepare(pcm512x->sclk); in pcm512x_suspend()
1694 if (!IS_ERR(pcm512x->sclk)) { in pcm512x_resume()
1695 ret = clk_prepare_enable(pcm512x->sclk); in pcm512x_resume()
1702 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), in pcm512x_resume()
1703 pcm512x->supplies); in pcm512x_resume()
1709 regcache_cache_only(pcm512x->regmap, false); in pcm512x_resume()
1710 ret = regcache_sync(pcm512x->regmap); in pcm512x_resume()
1716 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, in pcm512x_resume()