cs4234
regmap_read(cs4234->regmap, CS4234_DAC_CTRL4, &val);
struct cs4234 *cs4234 = container_of(dw, struct cs4234, vq_ramp_delay);
complete_all(&cs4234->vq_ramp_complete);
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component);
wait_for_completion(&cs4234->vq_ramp_complete);
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component);
cs4234->format = format & SND_SOC_DAIFMT_FORMAT_MASK;
switch (cs4234->format) {
if (cs4234->format == SND_SOC_DAIFMT_DSP_A) {
regmap_update_bits(cs4234->regmap, CS4234_SP_CTRL,
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component);
cs4234->lrclk_rate = params_rate(params);
mclk_mult = cs4234->mclk_rate / cs4234->lrclk_rate;
if (cs4234->lrclk_rate > 48000) {
regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP,
regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP,
switch (cs4234->lrclk_rate) {
regmap_update_bits(cs4234->regmap, CS4234_CLOCK_SP, CS4234_BASE_RATE_MASK,
regmap_update_bits(cs4234->regmap, CS4234_SAMPLE_WIDTH,
regmap_update_bits(cs4234->regmap, CS4234_SAMPLE_WIDTH,
struct cs4234 *cs4234 = rule->private;
int mclk = cs4234->mclk_rate;
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(comp);
switch (cs4234->format) {
cs4234->rate_constraint.nrats = 2;
cs4234->rate_constraint.nrats = 1;
for (i = 0; i < cs4234->rate_constraint.nrats; i++)
cs4234->rate_dividers[i].num = cs4234->mclk_rate / CS4234_MCLK_SCALE;
&cs4234->rate_constraint);
cs4234_dai_rule_rate, cs4234, -1);
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component);
regmap_update_bits(cs4234->regmap, CS4234_SP_DATA_SEL, CS4234_DAC14_SRC_MASK,
regmap_update_bits(cs4234->regmap, CS4234_SP_DATA_SEL, CS4234_LL_SRC_MASK,
regmap_bulk_write(cs4234->regmap,
static void cs4234_shutdown(struct cs4234 *cs4234)
cancel_delayed_work_sync(&cs4234->vq_ramp_delay);
reinit_completion(&cs4234->vq_ramp_complete);
regmap_update_bits(cs4234->regmap, CS4234_DAC_CTRL4, CS4234_VQ_RAMP_MASK,
regcache_cache_only(cs4234->regmap, true);
regmap_update_bits(cs4234->regmap, CS4234_DAC_CTRL4, CS4234_VQ_RAMP_MASK, 0);
gpiod_set_value_cansleep(cs4234->reset_gpio, 0);
regulator_bulk_disable(cs4234->num_core_supplies, cs4234->core_supplies);
clk_disable_unprepare(cs4234->mclk);
static int cs4234_powerup(struct cs4234 *cs4234)
ret = clk_prepare_enable(cs4234->mclk);
dev_err(cs4234->dev, "Failed to enable mclk: %d\n", ret);
ret = regulator_bulk_enable(cs4234->num_core_supplies, cs4234->core_supplies);
dev_err(cs4234->dev, "Failed to enable core supplies: %d\n", ret);
clk_disable_unprepare(cs4234->mclk);
gpiod_set_value_cansleep(cs4234->reset_gpio, 1);
&cs4234->vq_ramp_delay,
struct cs4234 *cs4234;
cs4234 = devm_kzalloc(dev, sizeof(*cs4234), GFP_KERNEL);
if (!cs4234)
i2c_set_clientdata(i2c_client, cs4234);
cs4234->dev = dev;
init_completion(&cs4234->vq_ramp_complete);
INIT_DELAYED_WORK(&cs4234->vq_ramp_delay, cs4234_vq_ramp_done);
cs4234->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(cs4234->reset_gpio))
return PTR_ERR(cs4234->reset_gpio);
BUILD_BUG_ON(ARRAY_SIZE(cs4234->core_supplies) < ARRAY_SIZE(cs4234_core_supplies));
cs4234->num_core_supplies = ARRAY_SIZE(cs4234_core_supplies);
cs4234->core_supplies[i].supply = cs4234_core_supplies[i];
ret = devm_regulator_bulk_get(dev, cs4234->num_core_supplies, cs4234->core_supplies);
cs4234->mclk = devm_clk_get(dev, "mclk");
if (IS_ERR(cs4234->mclk)) {
ret = PTR_ERR(cs4234->mclk);
cs4234->mclk_rate = clk_get_rate(cs4234->mclk);
if (cs4234->mclk_rate < 7680000 || cs4234->mclk_rate > 25600000) {
cs4234->regmap = devm_regmap_init_i2c(i2c_client, &cs4234_regmap);
if (IS_ERR(cs4234->regmap)) {
ret = PTR_ERR(cs4234->regmap);
ret = cs4234_powerup(cs4234);
ret = regmap_bulk_read(cs4234->regmap, CS4234_DEVID_AB, ids, ARRAY_SIZE(ids));
ret = regmap_read(cs4234->regmap, CS4234_REVID, &revid);
ret = regulator_get_voltage(cs4234->core_supplies[CS4234_SUPPLY_VA].consumer);
regmap_update_bits(cs4234->regmap, CS4234_ADC_CTRL1,
regmap_update_bits(cs4234->regmap, CS4234_ADC_CTRL1,
memcpy(&cs4234->rate_dividers, &cs4234_dividers, sizeof(cs4234_dividers));
cs4234->rate_constraint.rats = cs4234->rate_dividers;
cs4234_shutdown(cs4234);
struct cs4234 *cs4234 = i2c_get_clientdata(i2c_client);
cs4234_shutdown(cs4234);
struct cs4234 *cs4234 = dev_get_drvdata(dev);
ret = cs4234_powerup(cs4234);
regcache_mark_dirty(cs4234->regmap);
regcache_cache_only(cs4234->regmap, false);
ret = regcache_sync(cs4234->regmap);
cs4234_shutdown(cs4234);
struct cs4234 *cs4234 = snd_soc_component_get_drvdata(component);
struct cs4234 *cs4234 = dev_get_drvdata(dev);
cs4234_shutdown(cs4234);
regmap_read(cs4234->regmap, CS4234_ADC_CTRL2, &val);