Lines Matching full:es8389

3  * es8389.c  --  ES8389 ALSA SoC Audio Codec
26 #include "es8389.h"
62 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_dmic_set() local
72 regmap_update_bits_check(es8389->regmap, ES8389_DMIC_EN, 0xC0, 0xC0, &changed1); in es8389_dmic_set()
73 regmap_update_bits_check(es8389->regmap, ES8389_ADC_MODE, 0x03, 0x03, &changed2); in es8389_dmic_set()
75 regmap_update_bits_check(es8389->regmap, ES8389_DMIC_EN, 0xC0, 0x00, &changed1); in es8389_dmic_set()
76 regmap_update_bits_check(es8389->regmap, ES8389_ADC_MODE, 0x03, 0x00, &changed2); in es8389_dmic_set()
469 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_set_dai_sysclk() local
471 es8389->sysclk = freq; in es8389_set_dai_sysclk()
480 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_set_tdm_slot() local
482 regmap_update_bits(es8389->regmap, ES8389_PTDM_SLOT, in es8389_set_tdm_slot()
484 regmap_update_bits(es8389->regmap, ES8389_DAC_RAMP, in es8389_set_tdm_slot()
493 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_set_dai_fmt() local
498 regmap_update_bits(es8389->regmap, ES8389_MASTER_MODE, in es8389_set_dai_fmt()
500 es8389->mastermode = 1; in es8389_set_dai_fmt()
503 es8389->mastermode = 0; in es8389_set_dai_fmt()
528 regmap_update_bits(es8389->regmap, ES8389_ADC_FORMAT_MUTE, ES8389_DAIFMT_MASK, state); in es8389_set_dai_fmt()
529 regmap_update_bits(es8389->regmap, ES8389_DAC_FORMAT_MUTE, ES8389_DAIFMT_MASK, state); in es8389_set_dai_fmt()
539 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_pcm_hw_params() local
563 regmap_update_bits(es8389->regmap, ES8389_ADC_FORMAT_MUTE, ES8389_DATA_LEN_MASK, state); in es8389_pcm_hw_params()
564 regmap_update_bits(es8389->regmap, ES8389_DAC_FORMAT_MUTE, ES8389_DATA_LEN_MASK, state); in es8389_pcm_hw_params()
566 if (es8389->mclk_src == ES8389_SCLK_PIN) { in es8389_pcm_hw_params()
567 regmap_update_bits(es8389->regmap, ES8389_MASTER_CLK, in es8389_pcm_hw_params()
568 ES8389_MCLK_SOURCE, es8389->mclk_src); in es8389_pcm_hw_params()
569 es8389->sysclk = params_channels(params) * params_width(params) * params_rate(params); in es8389_pcm_hw_params()
572 coeff = get_coeff(es8389->sysclk, params_rate(params)); in es8389_pcm_hw_params()
574 regmap_write(es8389->regmap, ES8389_CLK_DIV1, coeff_div[coeff].Reg0x04); in es8389_pcm_hw_params()
575 regmap_write(es8389->regmap, ES8389_CLK_MUL, coeff_div[coeff].Reg0x05); in es8389_pcm_hw_params()
576 regmap_write(es8389->regmap, ES8389_CLK_MUX1, coeff_div[coeff].Reg0x06); in es8389_pcm_hw_params()
577 regmap_write(es8389->regmap, ES8389_CLK_MUX2, coeff_div[coeff].Reg0x07); in es8389_pcm_hw_params()
578 regmap_write(es8389->regmap, ES8389_CLK_CTL1, coeff_div[coeff].Reg0x08); in es8389_pcm_hw_params()
579 regmap_write(es8389->regmap, ES8389_CLK_CTL2, coeff_div[coeff].Reg0x09); in es8389_pcm_hw_params()
580 regmap_write(es8389->regmap, ES8389_CLK_CTL3, coeff_div[coeff].Reg0x0A); in es8389_pcm_hw_params()
581 regmap_update_bits(es8389->regmap, ES8389_OSC_CLK, in es8389_pcm_hw_params()
583 regmap_write(es8389->regmap, ES8389_CLK_DIV2, coeff_div[coeff].Reg0x11); in es8389_pcm_hw_params()
584 regmap_write(es8389->regmap, ES8389_ADC_OSR, coeff_div[coeff].Reg0x21); in es8389_pcm_hw_params()
585 regmap_write(es8389->regmap, ES8389_ADC_DSP, coeff_div[coeff].Reg0x22); in es8389_pcm_hw_params()
586 regmap_write(es8389->regmap, ES8389_OSR_VOL, coeff_div[coeff].Reg0x26); in es8389_pcm_hw_params()
587 regmap_update_bits(es8389->regmap, ES8389_SYSTEM30, in es8389_pcm_hw_params()
589 regmap_write(es8389->regmap, ES8389_DAC_DSM_OSR, coeff_div[coeff].Reg0x41); in es8389_pcm_hw_params()
590 regmap_write(es8389->regmap, ES8389_DAC_DSP_OSR, coeff_div[coeff].Reg0x42); in es8389_pcm_hw_params()
591 regmap_update_bits(es8389->regmap, ES8389_DAC_MISC, in es8389_pcm_hw_params()
593 regmap_update_bits(es8389->regmap, ES8389_CHIP_MISC, in es8389_pcm_hw_params()
595 regmap_write(es8389->regmap, ES8389_CSM_STATE1, coeff_div[coeff].Reg0xF1); in es8389_pcm_hw_params()
596 regmap_write(es8389->regmap, ES8389_SYSTEM16, coeff_div[coeff].Reg0x16); in es8389_pcm_hw_params()
597 regmap_write(es8389->regmap, ES8389_SYSTEM18, coeff_div[coeff].Reg0x18); in es8389_pcm_hw_params()
598 regmap_write(es8389->regmap, ES8389_SYSTEM19, coeff_div[coeff].Reg0x19); in es8389_pcm_hw_params()
610 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_set_bias_level() local
614 ret = clk_prepare_enable(es8389->mclk); in es8389_set_bias_level()
618 regmap_update_bits(es8389->regmap, ES8389_HPSW, 0x20, 0x20); in es8389_set_bias_level()
619 regmap_write(es8389->regmap, ES8389_ANA_CTL1, 0xD9); in es8389_set_bias_level()
620 regmap_write(es8389->regmap, ES8389_ADC_EN, 0x8F); in es8389_set_bias_level()
621 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0xE4); in es8389_set_bias_level()
622 regmap_write(es8389->regmap, ES8389_RESET, 0x01); in es8389_set_bias_level()
623 regmap_write(es8389->regmap, ES8389_CLK_OFF1, 0xC3); in es8389_set_bias_level()
624 regmap_update_bits(es8389->regmap, ES8389_ADC_HPF1, 0x0f, 0x0a); in es8389_set_bias_level()
625 regmap_update_bits(es8389->regmap, ES8389_ADC_HPF2, 0x0f, 0x0a); in es8389_set_bias_level()
627 regmap_write(es8389->regmap, ES8389_DAC_RESET, 0X00); in es8389_set_bias_level()
632 regmap_update_bits(es8389->regmap, ES8389_ADC_HPF1, 0x0f, 0x04); in es8389_set_bias_level()
633 regmap_update_bits(es8389->regmap, ES8389_ADC_HPF2, 0x0f, 0x04); in es8389_set_bias_level()
634 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0xD4); in es8389_set_bias_level()
636 regmap_write(es8389->regmap, ES8389_ANA_CTL1, 0x59); in es8389_set_bias_level()
637 regmap_write(es8389->regmap, ES8389_ADC_EN, 0x00); in es8389_set_bias_level()
638 regmap_write(es8389->regmap, ES8389_CLK_OFF1, 0x00); in es8389_set_bias_level()
639 regmap_write(es8389->regmap, ES8389_RESET, 0x3E); in es8389_set_bias_level()
640 regmap_update_bits(es8389->regmap, ES8389_DAC_INV, 0x80, 0x80); in es8389_set_bias_level()
642 regmap_update_bits(es8389->regmap, ES8389_DAC_INV, 0x80, 0x00); in es8389_set_bias_level()
644 clk_disable_unprepare(es8389->mclk); in es8389_set_bias_level()
657 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_mute() local
661 regmap_update_bits(es8389->regmap, ES8389_DAC_FORMAT_MUTE, in es8389_mute()
664 regmap_update_bits(es8389->regmap, ES8389_ADC_FORMAT_MUTE, in es8389_mute()
669 regmap_update_bits(es8389->regmap, ES8389_DAC_FORMAT_MUTE, in es8389_mute()
672 regmap_update_bits(es8389->regmap, ES8389_ADC_FORMAT_MUTE, in es8389_mute()
694 .name = "ES8389 HiFi",
715 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_init() local
717 regmap_write(es8389->regmap, ES8389_ISO_CTL, 0x00); in es8389_init()
718 regmap_write(es8389->regmap, ES8389_RESET, 0x7E); in es8389_init()
719 regmap_write(es8389->regmap, ES8389_ISO_CTL, 0x38); in es8389_init()
720 regmap_write(es8389->regmap, ES8389_ADC_HPF1, 0x64); in es8389_init()
721 regmap_write(es8389->regmap, ES8389_ADC_HPF2, 0x04); in es8389_init()
722 regmap_write(es8389->regmap, ES8389_DAC_INV, 0x03); in es8389_init()
724 regmap_write(es8389->regmap, ES8389_VMID, 0x2A); in es8389_init()
725 regmap_write(es8389->regmap, ES8389_ANA_CTL1, 0xC9); in es8389_init()
726 regmap_write(es8389->regmap, ES8389_ANA_VSEL, 0x4F); in es8389_init()
727 regmap_write(es8389->regmap, ES8389_ANA_CTL2, 0x06); in es8389_init()
728 regmap_write(es8389->regmap, ES8389_LOW_POWER1, 0x00); in es8389_init()
729 regmap_write(es8389->regmap, ES8389_DMIC_EN, 0x16); in es8389_init()
731 regmap_write(es8389->regmap, ES8389_PGA_SW, 0xAA); in es8389_init()
732 regmap_write(es8389->regmap, ES8389_MOD_SW1, 0x66); in es8389_init()
733 regmap_write(es8389->regmap, ES8389_MOD_SW2, 0x99); in es8389_init()
734 regmap_write(es8389->regmap, ES8389_ADC_MODE, (0x00 | ES8389_TDM_MODE)); in es8389_init()
735 regmap_update_bits(es8389->regmap, ES8389_DMIC_EN, 0xC0, 0x00); in es8389_init()
736 regmap_update_bits(es8389->regmap, ES8389_ADC_MODE, 0x03, 0x00); in es8389_init()
738 regmap_update_bits(es8389->regmap, ES8389_MIC1_GAIN, in es8389_init()
740 regmap_update_bits(es8389->regmap, ES8389_MIC2_GAIN, in es8389_init()
742 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0xC4); in es8389_init()
743 regmap_write(es8389->regmap, ES8389_MASTER_MODE, 0x08); in es8389_init()
744 regmap_write(es8389->regmap, ES8389_CSM_STATE1, 0x00); in es8389_init()
745 regmap_write(es8389->regmap, ES8389_SYSTEM12, 0x01); in es8389_init()
746 regmap_write(es8389->regmap, ES8389_SYSTEM13, 0x01); in es8389_init()
747 regmap_write(es8389->regmap, ES8389_SYSTEM14, 0x01); in es8389_init()
748 regmap_write(es8389->regmap, ES8389_SYSTEM15, 0x01); in es8389_init()
749 regmap_write(es8389->regmap, ES8389_SYSTEM16, 0x35); in es8389_init()
750 regmap_write(es8389->regmap, ES8389_SYSTEM17, 0x09); in es8389_init()
751 regmap_write(es8389->regmap, ES8389_SYSTEM18, 0x91); in es8389_init()
752 regmap_write(es8389->regmap, ES8389_SYSTEM19, 0x28); in es8389_init()
753 regmap_write(es8389->regmap, ES8389_SYSTEM1A, 0x01); in es8389_init()
754 regmap_write(es8389->regmap, ES8389_SYSTEM1B, 0x01); in es8389_init()
755 regmap_write(es8389->regmap, ES8389_SYSTEM1C, 0x11); in es8389_init()
757 regmap_write(es8389->regmap, ES8389_CHIP_MISC, 0x13); in es8389_init()
758 regmap_write(es8389->regmap, ES8389_MASTER_CLK, 0x00); in es8389_init()
759 regmap_write(es8389->regmap, ES8389_CLK_DIV1, 0x00); in es8389_init()
760 regmap_write(es8389->regmap, ES8389_CLK_MUL, 0x10); in es8389_init()
761 regmap_write(es8389->regmap, ES8389_CLK_MUX1, 0x00); in es8389_init()
762 regmap_write(es8389->regmap, ES8389_CLK_MUX2, 0xC0); in es8389_init()
763 regmap_write(es8389->regmap, ES8389_CLK_CTL1, 0x00); in es8389_init()
764 regmap_write(es8389->regmap, ES8389_CLK_CTL2, 0xC0); in es8389_init()
765 regmap_write(es8389->regmap, ES8389_CLK_CTL3, 0x80); in es8389_init()
766 regmap_write(es8389->regmap, ES8389_SCLK_DIV, 0x04); in es8389_init()
767 regmap_write(es8389->regmap, ES8389_LRCK_DIV1, 0x01); in es8389_init()
768 regmap_write(es8389->regmap, ES8389_LRCK_DIV2, 0x00); in es8389_init()
769 regmap_write(es8389->regmap, ES8389_OSC_CLK, 0x00); in es8389_init()
770 regmap_write(es8389->regmap, ES8389_ADC_OSR, 0x1F); in es8389_init()
771 regmap_write(es8389->regmap, ES8389_ADC_DSP, 0x7F); in es8389_init()
772 regmap_write(es8389->regmap, ES8389_ADC_MUTE, 0xC0); in es8389_init()
773 regmap_write(es8389->regmap, ES8389_SYSTEM30, 0xF4); in es8389_init()
774 regmap_write(es8389->regmap, ES8389_DAC_DSM_OSR, 0x7F); in es8389_init()
775 regmap_write(es8389->regmap, ES8389_DAC_DSP_OSR, 0x7F); in es8389_init()
776 regmap_write(es8389->regmap, ES8389_DAC_MISC, 0x10); in es8389_init()
777 regmap_write(es8389->regmap, ES8389_DAC_RAMP, 0x0F); in es8389_init()
778 regmap_write(es8389->regmap, ES8389_SYSTEM4C, 0xC0); in es8389_init()
779 regmap_write(es8389->regmap, ES8389_RESET, 0x00); in es8389_init()
780 regmap_write(es8389->regmap, ES8389_CLK_OFF1, 0xC1); in es8389_init()
781 regmap_write(es8389->regmap, ES8389_RESET, 0x01); in es8389_init()
782 regmap_write(es8389->regmap, ES8389_DAC_RESET, 0x02); in es8389_init()
784 regmap_update_bits(es8389->regmap, ES8389_ADC_FORMAT_MUTE, 0x03, 0x03); in es8389_init()
785 regmap_update_bits(es8389->regmap, ES8389_DAC_FORMAT_MUTE, 0x03, 0x03); in es8389_init()
790 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_suspend() local
793 regcache_cache_only(es8389->regmap, true); in es8389_suspend()
794 regcache_mark_dirty(es8389->regmap); in es8389_suspend()
801 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_resume() local
804 regcache_cache_only(es8389->regmap, false); in es8389_resume()
805 regcache_cache_bypass(es8389->regmap, true); in es8389_resume()
806 regmap_read(es8389->regmap, ES8389_RESET, &regv); in es8389_resume()
807 regcache_cache_bypass(es8389->regmap, false); in es8389_resume()
814 regcache_sync(es8389->regmap); in es8389_resume()
822 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_probe() local
824 ret = device_property_read_u8(component->dev, "everest,mclk-src", &es8389->mclk_src); in es8389_probe()
827 es8389->mclk_src = ES8389_MCLK_SOURCE; in es8389_probe()
830 es8389->mclk = devm_clk_get(component->dev, "mclk"); in es8389_probe()
831 if (IS_ERR(es8389->mclk)) in es8389_probe()
832 return dev_err_probe(component->dev, PTR_ERR(es8389->mclk), in es8389_probe()
833 "ES8389 is unable to get mclk\n"); in es8389_probe()
835 if (!es8389->mclk) in es8389_probe()
838 ret = clk_prepare_enable(es8389->mclk); in es8389_probe()
852 struct es8389_private *es8389 = snd_soc_component_get_drvdata(component); in es8389_remove() local
854 regmap_write(es8389->regmap, ES8389_MASTER_MODE, 0x28); in es8389_remove()
855 regmap_write(es8389->regmap, ES8389_HPSW, 0x00); in es8389_remove()
856 regmap_write(es8389->regmap, ES8389_VMID, 0x00); in es8389_remove()
857 regmap_write(es8389->regmap, ES8389_RESET, 0x00); in es8389_remove()
858 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0xCC); in es8389_remove()
860 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0x00); in es8389_remove()
861 regmap_write(es8389->regmap, ES8389_ANA_CTL1, 0x08); in es8389_remove()
862 regmap_write(es8389->regmap, ES8389_ISO_CTL, 0xC1); in es8389_remove()
863 regmap_write(es8389->regmap, ES8389_PULL_DOWN, 0x00); in es8389_remove()
896 struct es8389_private *es8389; in es8389_i2c_shutdown() local
898 es8389 = i2c_get_clientdata(i2c); in es8389_i2c_shutdown()
900 regmap_write(es8389->regmap, ES8389_MASTER_MODE, 0x28); in es8389_i2c_shutdown()
901 regmap_write(es8389->regmap, ES8389_HPSW, 0x00); in es8389_i2c_shutdown()
902 regmap_write(es8389->regmap, ES8389_VMID, 0x00); in es8389_i2c_shutdown()
903 regmap_write(es8389->regmap, ES8389_RESET, 0x00); in es8389_i2c_shutdown()
904 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0xCC); in es8389_i2c_shutdown()
906 regmap_write(es8389->regmap, ES8389_CSM_JUMP, 0x00); in es8389_i2c_shutdown()
907 regmap_write(es8389->regmap, ES8389_ANA_CTL1, 0x08); in es8389_i2c_shutdown()
908 regmap_write(es8389->regmap, ES8389_ISO_CTL, 0xC1); in es8389_i2c_shutdown()
909 regmap_write(es8389->regmap, ES8389_PULL_DOWN, 0x00); in es8389_i2c_shutdown()
914 struct es8389_private *es8389; in es8389_i2c_probe() local
917 es8389 = devm_kzalloc(&i2c_client->dev, sizeof(*es8389), GFP_KERNEL); in es8389_i2c_probe()
918 if (es8389 == NULL) in es8389_i2c_probe()
921 i2c_set_clientdata(i2c_client, es8389); in es8389_i2c_probe()
922 es8389->regmap = devm_regmap_init_i2c(i2c_client, &es8389_regmap); in es8389_i2c_probe()
923 if (IS_ERR(es8389->regmap)) in es8389_i2c_probe()
924 return dev_err_probe(&i2c_client->dev, PTR_ERR(es8389->regmap), in es8389_i2c_probe()
937 { .compatible = "everest,es8389", },
944 {"es8389"},
951 .name = "es8389",
960 MODULE_DESCRIPTION("ASoC es8389 driver");