Lines Matching refs:adau1977
111 struct adau1977 { struct
225 static int adau1977_reset(struct adau1977 *adau1977) in adau1977_reset() argument
235 regcache_cache_bypass(adau1977->regmap, true); in adau1977_reset()
236 ret = regmap_write(adau1977->regmap, ADAU1977_REG_POWER, in adau1977_reset()
238 regcache_cache_bypass(adau1977->regmap, false); in adau1977_reset()
265 static int adau1977_lookup_mcs(struct adau1977 *adau1977, unsigned int rate, in adau1977_lookup_mcs() argument
278 if (adau1977->sysclk % rate != 0) in adau1977_lookup_mcs()
281 mcs = adau1977->sysclk / rate; in adau1977_lookup_mcs()
298 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec); in adau1977_hw_params() local
310 if (adau1977->sysclk_src == ADAU1977_SYSCLK_SRC_MCLK) { in adau1977_hw_params()
311 mcs = adau1977_lookup_mcs(adau1977, rate, fs); in adau1977_hw_params()
321 if (adau1977->right_j) { in adau1977_hw_params()
335 if (adau1977->master) { in adau1977_hw_params()
351 if (adau1977->slot_width) in adau1977_hw_params()
352 slot_width = adau1977->slot_width; in adau1977_hw_params()
359 ret = regmap_update_bits(adau1977->regmap, in adau1977_hw_params()
368 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0, in adau1977_hw_params()
373 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL, in adau1977_hw_params()
377 static int adau1977_power_disable(struct adau1977 *adau1977) in adau1977_power_disable() argument
381 if (!adau1977->enabled) in adau1977_power_disable()
384 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER, in adau1977_power_disable()
389 regcache_mark_dirty(adau1977->regmap); in adau1977_power_disable()
391 if (adau1977->reset_gpio) in adau1977_power_disable()
392 gpiod_set_value_cansleep(adau1977->reset_gpio, 0); in adau1977_power_disable()
394 regcache_cache_only(adau1977->regmap, true); in adau1977_power_disable()
396 regulator_disable(adau1977->avdd_reg); in adau1977_power_disable()
397 if (adau1977->dvdd_reg) in adau1977_power_disable()
398 regulator_disable(adau1977->dvdd_reg); in adau1977_power_disable()
400 adau1977->enabled = false; in adau1977_power_disable()
405 static int adau1977_power_enable(struct adau1977 *adau1977) in adau1977_power_enable() argument
410 if (adau1977->enabled) in adau1977_power_enable()
413 ret = regulator_enable(adau1977->avdd_reg); in adau1977_power_enable()
417 if (adau1977->dvdd_reg) { in adau1977_power_enable()
418 ret = regulator_enable(adau1977->dvdd_reg); in adau1977_power_enable()
423 if (adau1977->reset_gpio) in adau1977_power_enable()
424 gpiod_set_value_cansleep(adau1977->reset_gpio, 1); in adau1977_power_enable()
426 regcache_cache_only(adau1977->regmap, false); in adau1977_power_enable()
428 if (adau1977->switch_mode) in adau1977_power_enable()
429 adau1977->switch_mode(adau1977->dev); in adau1977_power_enable()
431 ret = adau1977_reset(adau1977); in adau1977_power_enable()
435 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER, in adau1977_power_enable()
440 ret = regcache_sync(adau1977->regmap); in adau1977_power_enable()
451 ret = regmap_read(adau1977->regmap, ADAU1977_REG_PLL, &val); in adau1977_power_enable()
456 regcache_cache_bypass(adau1977->regmap, true); in adau1977_power_enable()
457 ret = regmap_write(adau1977->regmap, ADAU1977_REG_PLL, in adau1977_power_enable()
461 regcache_cache_bypass(adau1977->regmap, false); in adau1977_power_enable()
464 adau1977->enabled = true; in adau1977_power_enable()
469 if (adau1977->dvdd_reg) in adau1977_power_enable()
470 regulator_disable(adau1977->dvdd_reg); in adau1977_power_enable()
472 regulator_disable(adau1977->avdd_reg); in adau1977_power_enable()
479 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec); in adau1977_set_bias_level() local
489 ret = adau1977_power_enable(adau1977); in adau1977_set_bias_level()
492 ret = adau1977_power_disable(adau1977); in adau1977_set_bias_level()
502 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(dai->codec); in adau1977_set_tdm_slot() local
510 adau1977->slot_width = 0; in adau1977_set_tdm_slot()
511 adau1977->max_master_fs = 192000; in adau1977_set_tdm_slot()
512 return regmap_update_bits(adau1977->regmap, in adau1977_set_tdm_slot()
540 if (adau1977->master) in adau1977_set_tdm_slot()
568 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP, in adau1977_set_tdm_slot()
576 ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP12, in adau1977_set_tdm_slot()
582 ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP34, in adau1977_set_tdm_slot()
588 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0, in adau1977_set_tdm_slot()
593 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1, in adau1977_set_tdm_slot()
598 adau1977->slot_width = width; in adau1977_set_tdm_slot()
601 adau1977->max_master_fs = min(192000, 24576000 / width / slots); in adau1977_set_tdm_slot()
608 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(dai->codec); in adau1977_mute() local
616 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MISC_CONTROL, in adau1977_mute()
622 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(dai->codec); in adau1977_set_dai_fmt() local
629 adau1977->master = false; in adau1977_set_dai_fmt()
633 adau1977->master = true; in adau1977_set_dai_fmt()
658 adau1977->right_j = false; in adau1977_set_dai_fmt()
669 adau1977->right_j = true; in adau1977_set_dai_fmt()
689 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI, in adau1977_set_dai_fmt()
695 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0, in adau1977_set_dai_fmt()
701 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1, in adau1977_set_dai_fmt()
709 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(dai->codec); in adau1977_startup() local
712 if (adau1977->slot_width == 16) in adau1977_startup()
714 else if (adau1977->right_j || adau1977->slot_width == 24) in adau1977_startup()
719 SNDRV_PCM_HW_PARAM_RATE, &adau1977->constraints); in adau1977_startup()
721 if (adau1977->master) in adau1977_startup()
723 SNDRV_PCM_HW_PARAM_RATE, 8000, adau1977->max_master_fs); in adau1977_startup()
734 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(dai->codec); in adau1977_set_tristate() local
742 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP, in adau1977_set_tristate()
798 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec); in adau1977_set_sysclk() local
837 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL, in adau1977_set_sysclk()
842 adau1977->constraints.mask = mask; in adau1977_set_sysclk()
843 adau1977->sysclk_src = source; in adau1977_set_sysclk()
844 adau1977->sysclk = freq; in adau1977_set_sysclk()
852 struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec); in adau1977_codec_probe() local
855 switch (adau1977->type) { in adau1977_codec_probe()
884 static int adau1977_setup_micbias(struct adau1977 *adau1977) in adau1977_setup_micbias() argument
886 struct adau1977_platform_data *pdata = adau1977->dev->platform_data; in adau1977_setup_micbias()
898 return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MICBIAS, in adau1977_setup_micbias()
907 struct adau1977 *adau1977; in adau1977_probe() local
913 adau1977 = devm_kzalloc(dev, sizeof(*adau1977), GFP_KERNEL); in adau1977_probe()
914 if (adau1977 == NULL) in adau1977_probe()
917 adau1977->dev = dev; in adau1977_probe()
918 adau1977->type = type; in adau1977_probe()
919 adau1977->regmap = regmap; in adau1977_probe()
920 adau1977->switch_mode = switch_mode; in adau1977_probe()
921 adau1977->max_master_fs = 192000; in adau1977_probe()
923 adau1977->constraints.list = adau1977_rates; in adau1977_probe()
924 adau1977->constraints.count = ARRAY_SIZE(adau1977_rates); in adau1977_probe()
926 adau1977->avdd_reg = devm_regulator_get(dev, "AVDD"); in adau1977_probe()
927 if (IS_ERR(adau1977->avdd_reg)) in adau1977_probe()
928 return PTR_ERR(adau1977->avdd_reg); in adau1977_probe()
930 adau1977->dvdd_reg = devm_regulator_get_optional(dev, "DVDD"); in adau1977_probe()
931 if (IS_ERR(adau1977->dvdd_reg)) { in adau1977_probe()
932 if (PTR_ERR(adau1977->dvdd_reg) != -ENODEV) in adau1977_probe()
933 return PTR_ERR(adau1977->dvdd_reg); in adau1977_probe()
934 adau1977->dvdd_reg = NULL; in adau1977_probe()
937 adau1977->reset_gpio = devm_gpiod_get_optional(dev, "reset", in adau1977_probe()
939 if (IS_ERR(adau1977->reset_gpio)) in adau1977_probe()
940 return PTR_ERR(adau1977->reset_gpio); in adau1977_probe()
942 dev_set_drvdata(dev, adau1977); in adau1977_probe()
944 if (adau1977->reset_gpio) in adau1977_probe()
947 ret = adau1977_power_enable(adau1977); in adau1977_probe()
952 ret = adau1977_setup_micbias(adau1977); in adau1977_probe()
957 if (adau1977->dvdd_reg) in adau1977_probe()
962 ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI, in adau1977_probe()
967 ret = adau1977_power_disable(adau1977); in adau1977_probe()
975 adau1977_power_disable(adau1977); in adau1977_probe()