Lines Matching full:cs42l51

3  * cs42l51.c
5 * ASoC Driver for Cirrus Logic CS42L51 codecs
29 #include "cs42l51.h"
261 struct cs42l51_private *cs42l51 = snd_soc_component_get_drvdata(comp); in mclk_event() local
265 return clk_prepare_enable(cs42l51->mclk_handle); in mclk_event()
269 clk_disable_unprepare(cs42l51->mclk_handle); in mclk_event()
314 struct cs42l51_private *cs42l51 = snd_soc_component_get_drvdata(component); in cs42l51_set_dai_fmt() local
320 cs42l51->audio_mode = format & SND_SOC_DAIFMT_FORMAT_MASK; in cs42l51_set_dai_fmt()
329 cs42l51->func = MODE_MASTER; in cs42l51_set_dai_fmt()
332 cs42l51->func = MODE_SLAVE_AUTO; in cs42l51_set_dai_fmt()
390 struct cs42l51_private *cs42l51 = snd_soc_component_get_drvdata(component); in cs42l51_set_dai_sysclk() local
392 cs42l51->mclk = freq; in cs42l51_set_dai_sysclk()
401 struct cs42l51_private *cs42l51 = snd_soc_component_get_drvdata(component); in cs42l51_hw_params() local
410 switch (cs42l51->func) { in cs42l51_hw_params()
427 ratio = cs42l51->mclk / rate; /* MCLK/LRCK ratio */ in cs42l51_hw_params()
447 switch (cs42l51->func) { in cs42l51_hw_params()
469 switch (cs42l51->audio_mode) { in cs42l51_hw_params()
548 .name = "cs42l51-hifi",
570 struct cs42l51_private *cs42l51; in cs42l51_component_probe() local
572 cs42l51 = snd_soc_component_get_drvdata(component); in cs42l51_component_probe()
575 if (cs42l51->mclk_handle) in cs42l51_component_probe()
716 struct cs42l51_private *cs42l51; in cs42l51_probe() local
723 cs42l51 = devm_kzalloc(dev, sizeof(struct cs42l51_private), in cs42l51_probe()
725 if (!cs42l51) in cs42l51_probe()
728 dev_set_drvdata(dev, cs42l51); in cs42l51_probe()
729 cs42l51->regmap = regmap; in cs42l51_probe()
731 cs42l51->mclk_handle = devm_clk_get(dev, "MCLK"); in cs42l51_probe()
732 if (IS_ERR(cs42l51->mclk_handle)) { in cs42l51_probe()
733 if (PTR_ERR(cs42l51->mclk_handle) != -ENOENT) in cs42l51_probe()
734 return PTR_ERR(cs42l51->mclk_handle); in cs42l51_probe()
735 cs42l51->mclk_handle = NULL; in cs42l51_probe()
738 for (i = 0; i < ARRAY_SIZE(cs42l51->supplies); i++) in cs42l51_probe()
739 cs42l51->supplies[i].supply = cs42l51_supply_names[i]; in cs42l51_probe()
741 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(cs42l51->supplies), in cs42l51_probe()
742 cs42l51->supplies); in cs42l51_probe()
748 ret = regulator_bulk_enable(ARRAY_SIZE(cs42l51->supplies), in cs42l51_probe()
749 cs42l51->supplies); in cs42l51_probe()
755 cs42l51->reset_gpio = devm_gpiod_get_optional(dev, "reset", in cs42l51_probe()
757 if (IS_ERR(cs42l51->reset_gpio)) in cs42l51_probe()
758 return PTR_ERR(cs42l51->reset_gpio); in cs42l51_probe()
760 if (cs42l51->reset_gpio) { in cs42l51_probe()
762 gpiod_set_value_cansleep(cs42l51->reset_gpio, 0); in cs42l51_probe()
766 /* Verify that we have a CS42L51 */ in cs42l51_probe()
779 dev_info(dev, "Cirrus Logic CS42L51, Revision: %02X\n", in cs42l51_probe()
790 regulator_bulk_disable(ARRAY_SIZE(cs42l51->supplies), in cs42l51_probe()
791 cs42l51->supplies); in cs42l51_probe()
798 struct cs42l51_private *cs42l51 = dev_get_drvdata(dev); in cs42l51_remove() local
800 gpiod_set_value_cansleep(cs42l51->reset_gpio, 1); in cs42l51_remove()
802 return regulator_bulk_disable(ARRAY_SIZE(cs42l51->supplies), in cs42l51_remove()
803 cs42l51->supplies); in cs42l51_remove()
809 struct cs42l51_private *cs42l51 = dev_get_drvdata(dev); in cs42l51_suspend() local
811 regcache_cache_only(cs42l51->regmap, true); in cs42l51_suspend()
812 regcache_mark_dirty(cs42l51->regmap); in cs42l51_suspend()
820 struct cs42l51_private *cs42l51 = dev_get_drvdata(dev); in cs42l51_resume() local
822 regcache_cache_only(cs42l51->regmap, false); in cs42l51_resume()
824 return regcache_sync(cs42l51->regmap); in cs42l51_resume()
829 { .compatible = "cirrus,cs42l51", },
836 MODULE_DESCRIPTION("Cirrus Logic CS42L51 ALSA SoC Codec Driver");