Lines Matching +full:dvddio +full:- +full:supply

1 // SPDX-License-Identifier: GPL-2.0
22 #include <sound/soc-dapm.h>
30 struct regulator *dvddio;
43 regcache_mark_dirty(max9860->regmap);
44 regcache_cache_only(max9860->regmap, true);
126 static const DECLARE_TLV_DB_SCALE(dva_tlv, -9100, 100, 1);
128 static const DECLARE_TLV_DB_SCALE(adc_tlv, -1200, 100, 0);
130 0, MAX9860_PAM_MAX - 1, TLV_DB_SCALE_ITEM(-2000, 2000, 1),
133 static const DECLARE_TLV_DB_SCALE(anth_tlv, -7600, 400, 1);
134 static const DECLARE_TLV_DB_SCALE(agcth_tlv, -1800, 100, 0);
225 SND_SOC_DAPM_SUPPLY("Supply", SND_SOC_NOPM, 0, 0,
242 { "Supply", NULL, "AVDD" },
243 { "Supply", NULL, "DVDD" },
244 { "Supply", NULL, "mclk" },
246 { "DAC", NULL, "Supply" },
247 { "ADCL", NULL, "Supply" },
248 { "ADCR", NULL, "Supply" },
255 struct snd_soc_component *component = dai->component;
264 dev_dbg(component->dev, "hw_params %u Hz, %u channels\n",
271 switch (max9860->fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
279 return -EINVAL;
290 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
300 dev_err(component->dev,
302 return -EINVAL;
309 dev_err(component->dev,
311 return -EINVAL;
316 return -EINVAL;
319 switch (max9860->fmt & SND_SOC_DAIFMT_INV_MASK) {
323 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
326 return -EINVAL;
331 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
334 return -EINVAL;
343 return -EINVAL;
346 dev_dbg(component->dev, "IFC1A %02x\n", ifc1a);
347 ret = regmap_write(max9860->regmap, MAX9860_IFC1A, ifc1a);
349 dev_err(component->dev, "Failed to set IFC1A: %d\n", ret);
352 dev_dbg(component->dev, "IFC1B %02x\n", ifc1b);
353 ret = regmap_write(max9860->regmap, MAX9860_IFC1B, ifc1b);
355 dev_err(component->dev, "Failed to set IFC1B: %d\n", ret);
367 switch (max9860->pclk_rate) {
393 * 65536 * 96 * 48kHz / 10MHz -> 30199
395 * 65536 * 96 * 8kHz / 20MHz -> 2517
399 max9860->pclk_rate);
410 sysclk |= max9860->psclk;
411 dev_dbg(component->dev, "SYSCLK %02x\n", sysclk);
412 ret = regmap_write(max9860->regmap,
415 dev_err(component->dev, "Failed to set SYSCLK: %d\n", ret);
418 dev_dbg(component->dev, "N %lu\n", n);
419 ret = regmap_write(max9860->regmap,
422 dev_err(component->dev, "Failed to set NHI: %d\n", ret);
425 ret = regmap_write(max9860->regmap,
428 dev_err(component->dev, "Failed to set NLO: %d\n", ret);
433 dev_dbg(component->dev, "Enable PLL\n");
434 ret = regmap_update_bits(max9860->regmap, MAX9860_AUDIOCLKHIGH,
437 dev_err(component->dev, "Failed to enable PLL: %d\n",
448 struct snd_soc_component *component = dai->component;
454 max9860->fmt = fmt;
458 return -EINVAL;
468 .name = "max9860-hifi",
498 struct max9860_priv *max9860 = dev_get_drvdata(component->dev);
507 ret = regmap_update_bits(max9860->regmap, MAX9860_PWRMAN,
510 dev_err(component->dev, "Failed to remove SHDN: %d\n",
517 ret = regmap_update_bits(max9860->regmap, MAX9860_PWRMAN,
520 dev_err(component->dev, "Failed to request SHDN: %d\n",
547 ret = regmap_update_bits(max9860->regmap, MAX9860_SYSCLK,
554 regulator_disable(max9860->dvddio);
564 ret = regulator_enable(max9860->dvddio);
566 dev_err(dev, "Failed to enable DVDDIO: %d\n", ret);
570 regcache_cache_only(max9860->regmap, false);
571 ret = regcache_sync(max9860->regmap);
577 ret = regmap_update_bits(max9860->regmap, MAX9860_SYSCLK,
578 MAX9860_PSCLK, max9860->psclk);
593 struct device *dev = &i2c->dev;
603 return -ENOMEM;
605 max9860->dvddio = devm_regulator_get(dev, "DVDDIO");
606 if (IS_ERR(max9860->dvddio))
607 return dev_err_probe(dev, PTR_ERR(max9860->dvddio),
608 "Failed to get DVDDIO supply\n");
610 max9860->dvddio_nb.notifier_call = max9860_dvddio_event;
612 ret = devm_regulator_register_notifier(max9860->dvddio,
613 &max9860->dvddio_nb);
615 dev_err(dev, "Failed to register DVDDIO notifier: %d\n", ret);
617 ret = regulator_enable(max9860->dvddio);
619 dev_err(dev, "Failed to enable DVDDIO: %d\n", ret);
623 max9860->regmap = devm_regmap_init_i2c(i2c, &max9860_regmap);
624 if (IS_ERR(max9860->regmap)) {
625 ret = PTR_ERR(max9860->regmap);
648 dev_err(dev, "Bad mclk %luHz (needs 10MHz - 60MHz)\n",
650 ret = -EINVAL;
654 max9860->psclk = 3;
656 max9860->psclk = 2;
658 max9860->psclk = 1;
659 max9860->pclk_rate = mclk_rate >> (max9860->psclk - 1);
660 max9860->psclk <<= MAX9860_PSCLK_SHIFT;
661 dev_dbg(dev, "mclk %lu pclk %lu\n", mclk_rate, max9860->pclk_rate);
663 regcache_cache_bypass(max9860->regmap, true);
665 ret = regmap_write(max9860->regmap,
674 regcache_cache_bypass(max9860->regmap, false);
676 ret = regmap_read(max9860->regmap, MAX9860_INTRSTATUS, &intr);
698 regulator_disable(max9860->dvddio);
704 struct device *dev = &i2c->dev;
708 regulator_disable(max9860->dvddio);