Lines Matching refs:ak4458

24 #include "ak4458.h"
193 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
195 ucontrol->value.enumerated.item[0] = ak4458->digfil;
204 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
211 ak4458->digfil = num;
216 ((ak4458->digfil & 0x02) << 4));
221 (ak4458->digfil & 0x01));
226 ((ak4458->digfil & 0x04) >> 2));
254 /* ak4458 dapm widgets */
311 static int ak4458_get_tdm_mode(struct ak4458_priv *ak4458)
313 switch (ak4458->slots * ak4458->slot_width) {
350 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
351 int pcm_width = max(params_physical_width(params), ak4458->slot_width);
356 ak4458->fs = nfs1;
383 if (ak4458->drvdata->type == AK4497) {
408 if (ak4458->fmt == SND_SOC_DAIFMT_I2S)
414 switch (ak4458->fmt) {
445 dchn = ak4458_get_tdm_mode(ak4458) &&
446 (ak4458->fmt == SND_SOC_DAIFMT_DSP_B) &&
452 if (ak4458->drvdata->type == AK4497) {
454 0x4, (ak4458->dsd_path << 2));
473 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
493 ak4458->fmt = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
504 ak4458->fmt == SND_SOC_DAIFMT_PDM ?
523 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
527 nfs = ak4458->fs;
537 if (ak4458->mute_gpiod)
538 gpiod_set_value_cansleep(ak4458->mute_gpiod, 1);
540 if (ak4458->mute_gpiod)
541 gpiod_set_value_cansleep(ak4458->mute_gpiod, 0);
553 struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
556 ak4458->slots = slots;
557 ak4458->slot_width = slot_width;
559 mode = ak4458_get_tdm_mode(ak4458) << AK4458_MODE_SHIFT;
610 .name = "ak4458-aif",
633 static void ak4458_reset(struct ak4458_priv *ak4458, bool active)
635 if (ak4458->reset_gpiod) {
636 gpiod_set_value_cansleep(ak4458->reset_gpiod, active);
638 } else if (!IS_ERR_OR_NULL(ak4458->reset)) {
640 reset_control_assert(ak4458->reset);
642 reset_control_deassert(ak4458->reset);
650 struct ak4458_priv *ak4458 = dev_get_drvdata(dev);
652 regcache_cache_only(ak4458->regmap, true);
654 ak4458_reset(ak4458, true);
656 if (ak4458->mute_gpiod)
657 gpiod_set_value_cansleep(ak4458->mute_gpiod, 0);
659 regulator_bulk_disable(ARRAY_SIZE(ak4458->supplies),
660 ak4458->supplies);
666 struct ak4458_priv *ak4458 = dev_get_drvdata(dev);
669 ret = regulator_bulk_enable(ARRAY_SIZE(ak4458->supplies),
670 ak4458->supplies);
672 dev_err(ak4458->dev, "Failed to enable supplies: %d\n", ret);
676 if (ak4458->mute_gpiod)
677 gpiod_set_value_cansleep(ak4458->mute_gpiod, 1);
679 ak4458_reset(ak4458, false);
681 regcache_cache_only(ak4458->regmap, false);
682 regcache_mark_dirty(ak4458->regmap);
684 return regcache_sync(ak4458->regmap);
742 struct ak4458_priv *ak4458;
745 ak4458 = devm_kzalloc(&i2c->dev, sizeof(*ak4458), GFP_KERNEL);
746 if (!ak4458)
749 ak4458->regmap = devm_regmap_init_i2c(i2c, &ak4458_regmap);
750 if (IS_ERR(ak4458->regmap))
751 return PTR_ERR(ak4458->regmap);
753 i2c_set_clientdata(i2c, ak4458);
754 ak4458->dev = &i2c->dev;
756 ak4458->drvdata = of_device_get_match_data(&i2c->dev);
758 ak4458->reset = devm_reset_control_get_optional_shared(ak4458->dev, NULL);
759 if (IS_ERR(ak4458->reset))
760 return PTR_ERR(ak4458->reset);
762 ak4458->reset_gpiod = devm_gpiod_get_optional(ak4458->dev, "reset",
764 if (IS_ERR(ak4458->reset_gpiod))
765 return PTR_ERR(ak4458->reset_gpiod);
767 ak4458->mute_gpiod = devm_gpiod_get_optional(ak4458->dev, "mute",
769 if (IS_ERR(ak4458->mute_gpiod))
770 return PTR_ERR(ak4458->mute_gpiod);
773 of_property_read_u32(i2c->dev.of_node, "dsd-path", &ak4458->dsd_path);
775 for (i = 0; i < ARRAY_SIZE(ak4458->supplies); i++)
776 ak4458->supplies[i].supply = ak4458_supply_names[i];
778 ret = devm_regulator_bulk_get(ak4458->dev, ARRAY_SIZE(ak4458->supplies),
779 ak4458->supplies);
781 dev_err(ak4458->dev, "Failed to request supplies: %d\n", ret);
785 ret = devm_snd_soc_register_component(ak4458->dev,
786 ak4458->drvdata->comp_drv,
787 ak4458->drvdata->dai_drv, 1);
789 dev_err(ak4458->dev, "Failed to register CODEC: %d\n", ret);
794 regcache_cache_only(ak4458->regmap, true);
795 ak4458_reset(ak4458, false);
802 struct ak4458_priv *ak4458 = i2c_get_clientdata(i2c);
804 ak4458_reset(ak4458, true);
809 { .compatible = "asahi-kasei,ak4458", .data = &ak4458_drvdata},
817 .name = "ak4458",