Lines Matching defs:adau1977

15 #include <linux/platform_data/adau1977.h>
27 #include "adau1977.h"
110 struct adau1977 {
224 static int adau1977_reset(struct adau1977 *adau1977)
234 regcache_cache_bypass(adau1977->regmap, true);
235 ret = regmap_write(adau1977->regmap, ADAU1977_REG_POWER,
237 regcache_cache_bypass(adau1977->regmap, false);
264 static int adau1977_lookup_mcs(struct adau1977 *adau1977, unsigned int rate,
277 if (adau1977->sysclk % rate != 0)
280 mcs = adau1977->sysclk / rate;
297 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
309 if (adau1977->sysclk_src == ADAU1977_SYSCLK_SRC_MCLK) {
310 mcs = adau1977_lookup_mcs(adau1977, rate, fs);
320 if (adau1977->right_j) {
334 if (adau1977->master) {
350 if (adau1977->slot_width)
351 slot_width = adau1977->slot_width;
358 ret = regmap_update_bits(adau1977->regmap,
367 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
372 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL,
376 static int adau1977_power_disable(struct adau1977 *adau1977)
380 if (!adau1977->enabled)
383 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER,
388 regcache_mark_dirty(adau1977->regmap);
390 gpiod_set_value_cansleep(adau1977->reset_gpio, 0);
392 regcache_cache_only(adau1977->regmap, true);
394 regulator_disable(adau1977->avdd_reg);
395 if (adau1977->dvdd_reg)
396 regulator_disable(adau1977->dvdd_reg);
398 adau1977->enabled = false;
403 static int adau1977_power_enable(struct adau1977 *adau1977)
408 if (adau1977->enabled)
411 ret = regulator_enable(adau1977->avdd_reg);
415 if (adau1977->dvdd_reg) {
416 ret = regulator_enable(adau1977->dvdd_reg);
421 gpiod_set_value_cansleep(adau1977->reset_gpio, 1);
423 regcache_cache_only(adau1977->regmap, false);
425 if (adau1977->switch_mode)
426 adau1977->switch_mode(adau1977->dev);
428 ret = adau1977_reset(adau1977);
432 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER,
437 ret = regcache_sync(adau1977->regmap);
448 ret = regmap_read(adau1977->regmap, ADAU1977_REG_PLL, &val);
453 regcache_cache_bypass(adau1977->regmap, true);
454 ret = regmap_write(adau1977->regmap, ADAU1977_REG_PLL,
458 regcache_cache_bypass(adau1977->regmap, false);
461 adau1977->enabled = true;
466 if (adau1977->dvdd_reg)
467 regulator_disable(adau1977->dvdd_reg);
469 regulator_disable(adau1977->avdd_reg);
476 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
486 ret = adau1977_power_enable(adau1977);
489 ret = adau1977_power_disable(adau1977);
499 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
507 adau1977->slot_width = 0;
508 adau1977->max_master_fs = 192000;
509 return regmap_update_bits(adau1977->regmap,
537 if (adau1977->master)
565 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP,
573 ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP12,
579 ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP34,
585 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
590 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1,
595 adau1977->slot_width = width;
598 adau1977->max_master_fs = min(192000, 24576000 / width / slots);
605 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
613 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MISC_CONTROL,
619 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
626 adau1977->master = false;
630 adau1977->master = true;
655 adau1977->right_j = false;
666 adau1977->right_j = true;
686 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI,
692 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
698 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1,
706 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
709 if (adau1977->slot_width == 16)
711 else if (adau1977->right_j || adau1977->slot_width == 24)
716 SNDRV_PCM_HW_PARAM_RATE, &adau1977->constraints);
718 if (adau1977->master)
720 SNDRV_PCM_HW_PARAM_RATE, 8000, adau1977->max_master_fs);
731 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
739 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP,
753 .name = "adau1977-hifi",
795 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
834 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL,
839 adau1977->constraints.mask = mask;
840 adau1977->sysclk_src = source;
841 adau1977->sysclk = freq;
849 struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
852 switch (adau1977->type) {
882 static int adau1977_setup_micbias(struct adau1977 *adau1977)
884 struct adau1977_platform_data *pdata = adau1977->dev->platform_data;
889 else if (device_property_read_u32(adau1977->dev, "adi,micbias",
894 dev_err(adau1977->dev, "Invalid value for 'adi,micbias'\n");
898 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MICBIAS,
907 struct adau1977 *adau1977;
913 adau1977 = devm_kzalloc(dev, sizeof(*adau1977), GFP_KERNEL);
914 if (adau1977 == NULL)
917 adau1977->dev = dev;
918 adau1977->type = type;
919 adau1977->regmap = regmap;
920 adau1977->switch_mode = switch_mode;
921 adau1977->max_master_fs = 192000;
923 adau1977->constraints.list = adau1977_rates;
924 adau1977->constraints.count = ARRAY_SIZE(adau1977_rates);
926 adau1977->avdd_reg = devm_regulator_get(dev, "AVDD");
927 if (IS_ERR(adau1977->avdd_reg))
928 return PTR_ERR(adau1977->avdd_reg);
930 adau1977->dvdd_reg = devm_regulator_get_optional(dev, "DVDD");
931 if (IS_ERR(adau1977->dvdd_reg)) {
932 if (PTR_ERR(adau1977->dvdd_reg) != -ENODEV)
933 return PTR_ERR(adau1977->dvdd_reg);
934 adau1977->dvdd_reg = NULL;
937 adau1977->reset_gpio = devm_gpiod_get_optional(dev, "reset",
939 if (IS_ERR(adau1977->reset_gpio))
940 return PTR_ERR(adau1977->reset_gpio);
942 dev_set_drvdata(dev, adau1977);
944 if (adau1977->reset_gpio)
947 ret = adau1977_power_enable(adau1977);
952 ret = adau1977_setup_micbias(adau1977);
957 if (adau1977->dvdd_reg)
962 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI,
967 ret = adau1977_power_disable(adau1977);
975 adau1977_power_disable(adau1977);