Symbol: adau1977
sound/soc/codecs/adau1977.c
225
static int adau1977_reset(struct adau1977 *adau1977)
sound/soc/codecs/adau1977.c
235
regcache_cache_bypass(adau1977->regmap, true);
sound/soc/codecs/adau1977.c
236
ret = regmap_write(adau1977->regmap, ADAU1977_REG_POWER,
sound/soc/codecs/adau1977.c
238
regcache_cache_bypass(adau1977->regmap, false);
sound/soc/codecs/adau1977.c
263
static int adau1977_lookup_mcs(struct adau1977 *adau1977, unsigned int rate,
sound/soc/codecs/adau1977.c
276
if (adau1977->sysclk % rate != 0)
sound/soc/codecs/adau1977.c
279
mcs = adau1977->sysclk / rate;
sound/soc/codecs/adau1977.c
296
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/adau1977.c
308
if (adau1977->sysclk_src == ADAU1977_SYSCLK_SRC_MCLK) {
sound/soc/codecs/adau1977.c
309
mcs = adau1977_lookup_mcs(adau1977, rate, fs);
sound/soc/codecs/adau1977.c
319
if (adau1977->right_j) {
sound/soc/codecs/adau1977.c
333
if (adau1977->clock_provider) {
sound/soc/codecs/adau1977.c
349
if (adau1977->slot_width)
sound/soc/codecs/adau1977.c
350
slot_width = adau1977->slot_width;
sound/soc/codecs/adau1977.c
357
ret = regmap_update_bits(adau1977->regmap,
sound/soc/codecs/adau1977.c
366
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
sound/soc/codecs/adau1977.c
371
return regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL,
sound/soc/codecs/adau1977.c
375
static int adau1977_power_disable(struct adau1977 *adau1977)
sound/soc/codecs/adau1977.c
379
if (!adau1977->enabled)
sound/soc/codecs/adau1977.c
382
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER,
sound/soc/codecs/adau1977.c
387
regcache_mark_dirty(adau1977->regmap);
sound/soc/codecs/adau1977.c
389
gpiod_set_value_cansleep(adau1977->reset_gpio, 0);
sound/soc/codecs/adau1977.c
391
regcache_cache_only(adau1977->regmap, true);
sound/soc/codecs/adau1977.c
393
regulator_disable(adau1977->avdd_reg);
sound/soc/codecs/adau1977.c
394
if (adau1977->dvdd_reg)
sound/soc/codecs/adau1977.c
395
regulator_disable(adau1977->dvdd_reg);
sound/soc/codecs/adau1977.c
397
adau1977->enabled = false;
sound/soc/codecs/adau1977.c
402
static int adau1977_power_enable(struct adau1977 *adau1977)
sound/soc/codecs/adau1977.c
407
if (adau1977->enabled)
sound/soc/codecs/adau1977.c
410
ret = regulator_enable(adau1977->avdd_reg);
sound/soc/codecs/adau1977.c
414
if (adau1977->dvdd_reg) {
sound/soc/codecs/adau1977.c
415
ret = regulator_enable(adau1977->dvdd_reg);
sound/soc/codecs/adau1977.c
420
gpiod_set_value_cansleep(adau1977->reset_gpio, 1);
sound/soc/codecs/adau1977.c
422
regcache_cache_only(adau1977->regmap, false);
sound/soc/codecs/adau1977.c
424
if (adau1977->switch_mode)
sound/soc/codecs/adau1977.c
425
adau1977->switch_mode(adau1977->dev);
sound/soc/codecs/adau1977.c
427
ret = adau1977_reset(adau1977);
sound/soc/codecs/adau1977.c
431
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_POWER,
sound/soc/codecs/adau1977.c
436
ret = regcache_sync(adau1977->regmap);
sound/soc/codecs/adau1977.c
447
ret = regmap_read(adau1977->regmap, ADAU1977_REG_PLL, &val);
sound/soc/codecs/adau1977.c
452
regcache_cache_bypass(adau1977->regmap, true);
sound/soc/codecs/adau1977.c
453
ret = regmap_write(adau1977->regmap, ADAU1977_REG_PLL,
sound/soc/codecs/adau1977.c
457
regcache_cache_bypass(adau1977->regmap, false);
sound/soc/codecs/adau1977.c
460
adau1977->enabled = true;
sound/soc/codecs/adau1977.c
465
if (adau1977->dvdd_reg)
sound/soc/codecs/adau1977.c
466
regulator_disable(adau1977->dvdd_reg);
sound/soc/codecs/adau1977.c
468
regulator_disable(adau1977->avdd_reg);
sound/soc/codecs/adau1977.c
475
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/adau1977.c
486
ret = adau1977_power_enable(adau1977);
sound/soc/codecs/adau1977.c
489
ret = adau1977_power_disable(adau1977);
sound/soc/codecs/adau1977.c
499
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
sound/soc/codecs/adau1977.c
507
adau1977->slot_width = 0;
sound/soc/codecs/adau1977.c
508
adau1977->max_clock_provider_fs = 192000;
sound/soc/codecs/adau1977.c
509
return regmap_update_bits(adau1977->regmap,
sound/soc/codecs/adau1977.c
537
if (adau1977->clock_provider)
sound/soc/codecs/adau1977.c
565
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP,
sound/soc/codecs/adau1977.c
573
ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP12,
sound/soc/codecs/adau1977.c
579
ret = regmap_write(adau1977->regmap, ADAU1977_REG_CMAP34,
sound/soc/codecs/adau1977.c
585
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
sound/soc/codecs/adau1977.c
590
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1,
sound/soc/codecs/adau1977.c
595
adau1977->slot_width = width;
sound/soc/codecs/adau1977.c
598
adau1977->max_clock_provider_fs = min(192000, 24576000 / width / slots);
sound/soc/codecs/adau1977.c
605
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
sound/soc/codecs/adau1977.c
613
return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MISC_CONTROL,
sound/soc/codecs/adau1977.c
619
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
sound/soc/codecs/adau1977.c
626
adau1977->clock_provider = false;
sound/soc/codecs/adau1977.c
630
adau1977->clock_provider = true;
sound/soc/codecs/adau1977.c
655
adau1977->right_j = false;
sound/soc/codecs/adau1977.c
666
adau1977->right_j = true;
sound/soc/codecs/adau1977.c
686
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI,
sound/soc/codecs/adau1977.c
692
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL0,
sound/soc/codecs/adau1977.c
698
return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_CTRL1,
sound/soc/codecs/adau1977.c
706
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
sound/soc/codecs/adau1977.c
709
if (adau1977->slot_width == 16)
sound/soc/codecs/adau1977.c
711
else if (adau1977->right_j || adau1977->slot_width == 24)
sound/soc/codecs/adau1977.c
716
SNDRV_PCM_HW_PARAM_RATE, &adau1977->constraints);
sound/soc/codecs/adau1977.c
718
if (adau1977->clock_provider)
sound/soc/codecs/adau1977.c
721
adau1977->max_clock_provider_fs);
sound/soc/codecs/adau1977.c
732
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(dai->component);
sound/soc/codecs/adau1977.c
740
return regmap_update_bits(adau1977->regmap, ADAU1977_REG_SAI_OVERTEMP,
sound/soc/codecs/adau1977.c
796
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/adau1977.c
835
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_PLL,
sound/soc/codecs/adau1977.c
840
adau1977->constraints.mask = mask;
sound/soc/codecs/adau1977.c
841
adau1977->sysclk_src = source;
sound/soc/codecs/adau1977.c
842
adau1977->sysclk = freq;
sound/soc/codecs/adau1977.c
850
struct adau1977 *adau1977 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/adau1977.c
853
switch (adau1977->type) {
sound/soc/codecs/adau1977.c
882
static int adau1977_setup_micbias(struct adau1977 *adau1977)
sound/soc/codecs/adau1977.c
886
if (device_property_read_u32(adau1977->dev, "adi,micbias", &micbias))
sound/soc/codecs/adau1977.c
890
dev_err(adau1977->dev, "Invalid value for 'adi,micbias'\n");
sound/soc/codecs/adau1977.c
894
return regmap_update_bits(adau1977->regmap, ADAU1977_REG_MICBIAS,
sound/soc/codecs/adau1977.c
903
struct adau1977 *adau1977;
sound/soc/codecs/adau1977.c
909
adau1977 = devm_kzalloc(dev, sizeof(*adau1977), GFP_KERNEL);
sound/soc/codecs/adau1977.c
910
if (adau1977 == NULL)
sound/soc/codecs/adau1977.c
913
adau1977->dev = dev;
sound/soc/codecs/adau1977.c
914
adau1977->type = type;
sound/soc/codecs/adau1977.c
915
adau1977->regmap = regmap;
sound/soc/codecs/adau1977.c
916
adau1977->switch_mode = switch_mode;
sound/soc/codecs/adau1977.c
917
adau1977->max_clock_provider_fs = 192000;
sound/soc/codecs/adau1977.c
919
adau1977->constraints.list = adau1977_rates;
sound/soc/codecs/adau1977.c
920
adau1977->constraints.count = ARRAY_SIZE(adau1977_rates);
sound/soc/codecs/adau1977.c
922
adau1977->avdd_reg = devm_regulator_get(dev, "AVDD");
sound/soc/codecs/adau1977.c
923
if (IS_ERR(adau1977->avdd_reg))
sound/soc/codecs/adau1977.c
924
return PTR_ERR(adau1977->avdd_reg);
sound/soc/codecs/adau1977.c
926
adau1977->dvdd_reg = devm_regulator_get_optional(dev, "DVDD");
sound/soc/codecs/adau1977.c
927
if (IS_ERR(adau1977->dvdd_reg)) {
sound/soc/codecs/adau1977.c
928
if (PTR_ERR(adau1977->dvdd_reg) != -ENODEV)
sound/soc/codecs/adau1977.c
929
return PTR_ERR(adau1977->dvdd_reg);
sound/soc/codecs/adau1977.c
930
adau1977->dvdd_reg = NULL;
sound/soc/codecs/adau1977.c
933
adau1977->reset_gpio = devm_gpiod_get_optional(dev, "reset",
sound/soc/codecs/adau1977.c
935
if (IS_ERR(adau1977->reset_gpio))
sound/soc/codecs/adau1977.c
936
return PTR_ERR(adau1977->reset_gpio);
sound/soc/codecs/adau1977.c
938
dev_set_drvdata(dev, adau1977);
sound/soc/codecs/adau1977.c
940
if (adau1977->reset_gpio)
sound/soc/codecs/adau1977.c
943
ret = adau1977_power_enable(adau1977);
sound/soc/codecs/adau1977.c
948
ret = adau1977_setup_micbias(adau1977);
sound/soc/codecs/adau1977.c
953
if (adau1977->dvdd_reg)
sound/soc/codecs/adau1977.c
958
ret = regmap_update_bits(adau1977->regmap, ADAU1977_REG_BLOCK_POWER_SAI,
sound/soc/codecs/adau1977.c
963
ret = adau1977_power_disable(adau1977);
sound/soc/codecs/adau1977.c
971
adau1977_power_disable(adau1977);