Lines Matching refs:cs4234

28 struct cs4234 {  struct
89 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component); in cs4234_dac14_grp_delay_put() local
96 regmap_read(cs4234->regmap, CS4234_ADC_CTRL2, &val); in cs4234_dac14_grp_delay_put()
103 regmap_read(cs4234->regmap, CS4234_DAC_CTRL4, &val); in cs4234_dac14_grp_delay_put()
120 struct cs4234 *cs4234 = container_of(dw, struct cs4234, vq_ramp_delay); in cs4234_vq_ramp_done() local
122 complete_all(&cs4234->vq_ramp_complete); in cs4234_vq_ramp_done()
128 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component); in cs4234_set_bias_level() local
134 wait_for_completion(&cs4234->vq_ramp_complete); in cs4234_set_bias_level()
290 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component); in cs4234_dai_set_fmt() local
293 cs4234->format = format & SND_SOC_DAIFMT_FORMAT_MASK; in cs4234_dai_set_fmt()
294 switch (cs4234->format) { in cs4234_dai_set_fmt()
313 if (cs4234->format == SND_SOC_DAIFMT_DSP_A) { in cs4234_dai_set_fmt()
335 regmap_update_bits(cs4234->regmap, CS4234_SP_CTRL, in cs4234_dai_set_fmt()
347 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component); in cs4234_dai_hw_params() local
351 cs4234->lrclk_rate = params_rate(params); in cs4234_dai_hw_params()
352 mclk_mult = cs4234->mclk_rate / cs4234->lrclk_rate; in cs4234_dai_hw_params()
354 if (cs4234->lrclk_rate > 48000) { in cs4234_dai_hw_params()
363 regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP, in cs4234_dai_hw_params()
366 regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP, in cs4234_dai_hw_params()
375 switch (cs4234->lrclk_rate) { in cs4234_dai_hw_params()
392 regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP, CS4234_BASE_RATE_MASK, in cs4234_dai_hw_params()
414 regmap_update_bits(cs4234->regmap, CS4234_SAMPLE_WIDTH, in cs4234_dai_hw_params()
418 regmap_update_bits(cs4234->regmap, CS4234_SAMPLE_WIDTH, in cs4234_dai_hw_params()
447 struct cs4234 *cs4234 = rule->private; in cs4234_dai_rule_rate() local
448 int mclk = cs4234->mclk_rate; in cs4234_dai_rule_rate()
467 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(comp); in cs4234_dai_startup() local
470 switch (cs4234->format) { in cs4234_dai_startup()
473 cs4234->rate_constraint.nrats = 2; in cs4234_dai_startup()
498 cs4234->rate_constraint.nrats = 1; in cs4234_dai_startup()
505 for (i = 0; i < cs4234->rate_constraint.nrats; i++) in cs4234_dai_startup()
506 cs4234->rate_dividers[i].num = cs4234->mclk_rate / CS4234_MCLK_SCALE; in cs4234_dai_startup()
510 &cs4234->rate_constraint); in cs4234_dai_startup()
519 cs4234_dai_rule_rate, cs4234, -1); in cs4234_dai_startup()
526 struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component); in cs4234_dai_set_tdm_slot() local
543 regmap_update_bits(cs4234->regmap, CS4234_SP_DATA_SEL, CS4234_DAC14_SRC_MASK, in cs4234_dai_set_tdm_slot()
545 regmap_update_bits(cs4234->regmap, CS4234_SP_DATA_SEL, CS4234_LL_SRC_MASK, in cs4234_dai_set_tdm_slot()
554 regmap_bulk_write(cs4234->regmap, in cs4234_dai_set_tdm_slot()
688 static void cs4234_shutdown(struct cs4234 *cs4234) in cs4234_shutdown() argument
690 cancel_delayed_work_sync(&cs4234->vq_ramp_delay); in cs4234_shutdown()
691 reinit_completion(&cs4234->vq_ramp_complete); in cs4234_shutdown()
693 regmap_update_bits(cs4234->regmap, CS4234_DAC_CTRL4, CS4234_VQ_RAMP_MASK, in cs4234_shutdown()
696 regcache_cache_only(cs4234->regmap, true); in cs4234_shutdown()
698 regmap_update_bits(cs4234->regmap, CS4234_DAC_CTRL4, CS4234_VQ_RAMP_MASK, 0); in cs4234_shutdown()
699 gpiod_set_value_cansleep(cs4234->reset_gpio, 0); in cs4234_shutdown()
700 regulator_bulk_disable(cs4234->num_core_supplies, cs4234->core_supplies); in cs4234_shutdown()
701 clk_disable_unprepare(cs4234->mclk); in cs4234_shutdown()
704 static int cs4234_powerup(struct cs4234 *cs4234) in cs4234_powerup() argument
708 ret = clk_prepare_enable(cs4234->mclk); in cs4234_powerup()
710 dev_err(cs4234->dev, "Failed to enable mclk: %d\n", ret); in cs4234_powerup()
714 ret = regulator_bulk_enable(cs4234->num_core_supplies, cs4234->core_supplies); in cs4234_powerup()
716 dev_err(cs4234->dev, "Failed to enable core supplies: %d\n", ret); in cs4234_powerup()
717 clk_disable_unprepare(cs4234->mclk); in cs4234_powerup()
722 gpiod_set_value_cansleep(cs4234->reset_gpio, 1); in cs4234_powerup()
728 &cs4234->vq_ramp_delay, in cs4234_powerup()
736 struct cs4234 *cs4234; in cs4234_i2c_probe() local
743 cs4234 = devm_kzalloc(dev, sizeof(*cs4234), GFP_KERNEL); in cs4234_i2c_probe()
744 if (!cs4234) in cs4234_i2c_probe()
746 i2c_set_clientdata(i2c_client, cs4234); in cs4234_i2c_probe()
747 cs4234->dev = dev; in cs4234_i2c_probe()
748 init_completion(&cs4234->vq_ramp_complete); in cs4234_i2c_probe()
749 INIT_DELAYED_WORK(&cs4234->vq_ramp_delay, cs4234_vq_ramp_done); in cs4234_i2c_probe()
751 cs4234->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in cs4234_i2c_probe()
752 if (IS_ERR(cs4234->reset_gpio)) in cs4234_i2c_probe()
753 return PTR_ERR(cs4234->reset_gpio); in cs4234_i2c_probe()
755 BUILD_BUG_ON(ARRAY_SIZE(cs4234->core_supplies) < ARRAY_SIZE(cs4234_core_supplies)); in cs4234_i2c_probe()
757 cs4234->num_core_supplies = ARRAY_SIZE(cs4234_core_supplies); in cs4234_i2c_probe()
759 cs4234->core_supplies[i].supply = cs4234_core_supplies[i]; in cs4234_i2c_probe()
761 ret = devm_regulator_bulk_get(dev, cs4234->num_core_supplies, cs4234->core_supplies); in cs4234_i2c_probe()
767 cs4234->mclk = devm_clk_get(dev, "mclk"); in cs4234_i2c_probe()
768 if (IS_ERR(cs4234->mclk)) { in cs4234_i2c_probe()
769 ret = PTR_ERR(cs4234->mclk); in cs4234_i2c_probe()
773 cs4234->mclk_rate = clk_get_rate(cs4234->mclk); in cs4234_i2c_probe()
775 if (cs4234->mclk_rate < 7680000 || cs4234->mclk_rate > 25600000) { in cs4234_i2c_probe()
780 cs4234->regmap = devm_regmap_init_i2c(i2c_client, &cs4234_regmap); in cs4234_i2c_probe()
781 if (IS_ERR(cs4234->regmap)) { in cs4234_i2c_probe()
782 ret = PTR_ERR(cs4234->regmap); in cs4234_i2c_probe()
787 ret = cs4234_powerup(cs4234); in cs4234_i2c_probe()
791 ret = regmap_bulk_read(cs4234->regmap, CS4234_DEVID_AB, ids, ARRAY_SIZE(ids)); in cs4234_i2c_probe()
804 ret = regmap_read(cs4234->regmap, CS4234_REVID, &revid); in cs4234_i2c_probe()
813 ret = regulator_get_voltage(cs4234->core_supplies[CS4234_SUPPLY_VA].consumer); in cs4234_i2c_probe()
816 regmap_update_bits(cs4234->regmap, CS4234_ADC_CTRL1, in cs4234_i2c_probe()
821 regmap_update_bits(cs4234->regmap, CS4234_ADC_CTRL1, in cs4234_i2c_probe()
834 memcpy(&cs4234->rate_dividers, &cs4234_dividers, sizeof(cs4234_dividers)); in cs4234_i2c_probe()
835 cs4234->rate_constraint.rats = cs4234->rate_dividers; in cs4234_i2c_probe()
848 cs4234_shutdown(cs4234); in cs4234_i2c_probe()
855 struct cs4234 *cs4234 = i2c_get_clientdata(i2c_client); in cs4234_i2c_remove() local
860 cs4234_shutdown(cs4234); in cs4234_i2c_remove()
865 struct cs4234 *cs4234 = dev_get_drvdata(dev); in cs4234_runtime_resume() local
868 ret = cs4234_powerup(cs4234); in cs4234_runtime_resume()
872 regcache_mark_dirty(cs4234->regmap); in cs4234_runtime_resume()
873 regcache_cache_only(cs4234->regmap, false); in cs4234_runtime_resume()
874 ret = regcache_sync(cs4234->regmap); in cs4234_runtime_resume()
877 cs4234_shutdown(cs4234); in cs4234_runtime_resume()
886 struct cs4234 *cs4234 = dev_get_drvdata(dev); in cs4234_runtime_suspend() local
888 cs4234_shutdown(cs4234); in cs4234_runtime_suspend()