Symbol: cs48l32
sound/soc/codecs/cs48l32-tables.c
25
int cs48l32_apply_patch(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32-tables.c
29
ret = regmap_register_patch(cs48l32->regmap, cs48l32_reva_patch,
sound/soc/codecs/cs48l32-tables.c
32
return dev_err_probe(cs48l32->dev, ret, "Failed to apply patch\n");
sound/soc/codecs/cs48l32-tables.c
533
int cs48l32_create_regmap(struct spi_device *spi, struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32-tables.c
535
cs48l32->regmap = devm_regmap_init_spi(spi, &cs48l32_regmap);
sound/soc/codecs/cs48l32-tables.c
537
return PTR_ERR_OR_ZERO(cs48l32->regmap);
sound/soc/codecs/cs48l32.c
1552
struct cs48l32 *cs48l32 = &fll->codec->core;
sound/soc/codecs/cs48l32.c
1564
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1567
regmap_clear_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1570
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1573
regmap_update_bits_check(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1589
regmap_clear_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1594
pm_runtime_put_autosuspend(cs48l32->dev);
sound/soc/codecs/cs48l32.c
1731
struct cs48l32 *cs48l32 = &fll->codec->core;
sound/soc/codecs/cs48l32.c
1739
pm_runtime_get_sync(cs48l32->dev);
sound/soc/codecs/cs48l32.c
1745
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1755
regmap_update_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1760
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1765
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1769
regmap_set_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
1774
regmap_clear_bits(cs48l32->regmap,
sound/soc/codecs/cs48l32.c
201
struct cs48l32 *cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
206
if (pm_runtime_suspended(cs48l32->dev))
sound/soc/codecs/cs48l32.c
214
ret = regmap_read(cs48l32->regmap, CS48L32_DEVID, &val);
sound/soc/codecs/cs48l32.c
3567
struct cs48l32 *cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
3570
ret = device_property_read_u32_array(cs48l32->dev, propname, dest, n_max);
sound/soc/codecs/cs48l32.c
3575
return dev_err_probe(cs48l32->dev, ret, "%s malformed\n", propname);
sound/soc/codecs/cs48l32.c
3724
static int cs48l32_wait_for_boot(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3729
ret = regmap_read_poll_timeout(cs48l32->regmap, CS48L32_IRQ1_EINT_2, val,
sound/soc/codecs/cs48l32.c
3733
dev_err(cs48l32->dev, "BOOT_DONE timed out\n");
sound/soc/codecs/cs48l32.c
3737
ret = regmap_read(cs48l32->regmap, CS48L32_MCU_CTRL1, &val);
sound/soc/codecs/cs48l32.c
3739
dev_err(cs48l32->dev, "Failed to read MCU_CTRL1: %d\n", ret);
sound/soc/codecs/cs48l32.c
3744
dev_err(cs48l32->dev, "MCU boot failed\n");
sound/soc/codecs/cs48l32.c
3748
pm_runtime_mark_last_busy(cs48l32->dev);
sound/soc/codecs/cs48l32.c
3753
static int cs48l32_soft_reset(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3757
ret = regmap_write(cs48l32->regmap, CS48L32_SFT_RESET, CS48L32_SFT_RESET_MAGIC);
sound/soc/codecs/cs48l32.c
3759
dev_err(cs48l32->dev, "Failed to write soft reset: %d\n", ret);
sound/soc/codecs/cs48l32.c
3768
static void cs48l32_enable_hard_reset(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3770
if (cs48l32->reset_gpio)
sound/soc/codecs/cs48l32.c
3771
gpiod_set_raw_value_cansleep(cs48l32->reset_gpio, 0);
sound/soc/codecs/cs48l32.c
3774
static void cs48l32_disable_hard_reset(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3776
if (cs48l32->reset_gpio) {
sound/soc/codecs/cs48l32.c
3777
gpiod_set_raw_value_cansleep(cs48l32->reset_gpio, 1);
sound/soc/codecs/cs48l32.c
3785
struct cs48l32 *cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
3789
ret = regulator_enable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
3791
dev_err(cs48l32->dev, "Failed to enable VDD_D: %d\n", ret);
sound/soc/codecs/cs48l32.c
3797
regcache_cache_only(cs48l32->regmap, false);
sound/soc/codecs/cs48l32.c
3799
ret = cs48l32_wait_for_boot(cs48l32);
sound/soc/codecs/cs48l32.c
3804
regmap_read(cs48l32->regmap, CS48L32_CTRL_IF_DEBUG3, &val);
sound/soc/codecs/cs48l32.c
3806
regcache_mark_dirty(cs48l32->regmap);
sound/soc/codecs/cs48l32.c
3808
dev_dbg(cs48l32->dev, "Did not reset during suspend\n");
sound/soc/codecs/cs48l32.c
3810
ret = regcache_sync(cs48l32->regmap);
sound/soc/codecs/cs48l32.c
3812
dev_err(cs48l32->dev, "Failed to restore register cache\n");
sound/soc/codecs/cs48l32.c
3819
regcache_cache_only(cs48l32->regmap, true);
sound/soc/codecs/cs48l32.c
3820
regulator_disable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
3828
struct cs48l32 *cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
3831
regmap_write(cs48l32->regmap, CS48L32_CTRL_IF_DEBUG3, 1);
sound/soc/codecs/cs48l32.c
3833
regcache_cache_only(cs48l32->regmap, true);
sound/soc/codecs/cs48l32.c
3834
regulator_disable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
3843
static int cs48l32_configure_clk32k(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3847
ret = clk_prepare_enable(cs48l32->mclk1);
sound/soc/codecs/cs48l32.c
3849
return dev_err_probe(cs48l32->dev, ret, "Failed to enable 32k clock\n");
sound/soc/codecs/cs48l32.c
3851
ret = regmap_update_bits(cs48l32->regmap, CS48L32_CLOCK32K,
sound/soc/codecs/cs48l32.c
3855
clk_disable_unprepare(cs48l32->mclk1);
sound/soc/codecs/cs48l32.c
3856
return dev_err_probe(cs48l32->dev, ret, "Failed to init 32k clock\n");
sound/soc/codecs/cs48l32.c
3862
static int cs48l32_get_clocks(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3864
cs48l32->mclk1 = devm_clk_get_optional(cs48l32->dev, "mclk1");
sound/soc/codecs/cs48l32.c
3865
if (IS_ERR(cs48l32->mclk1))
sound/soc/codecs/cs48l32.c
3866
return dev_err_probe(cs48l32->dev, PTR_ERR(cs48l32->mclk1),
sound/soc/codecs/cs48l32.c
3872
static int cs48l32_get_reset_gpio(struct cs48l32 *cs48l32)
sound/soc/codecs/cs48l32.c
3876
reset = devm_gpiod_get_optional(cs48l32->dev, "reset", GPIOD_OUT_LOW);
sound/soc/codecs/cs48l32.c
3878
return dev_err_probe(cs48l32->dev, PTR_ERR(reset), "Failed to request /RESET\n");
sound/soc/codecs/cs48l32.c
3883
cs48l32->reset_gpio = reset;
sound/soc/codecs/cs48l32.c
3892
struct cs48l32 *cs48l32;
sound/soc/codecs/cs48l32.c
3900
cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
3901
cs48l32->dev = dev;
sound/soc/codecs/cs48l32.c
3902
cs48l32->irq = spi->irq;
sound/soc/codecs/cs48l32.c
3906
dev_set_drvdata(cs48l32->dev, cs48l32_codec);
sound/soc/codecs/cs48l32.c
3908
ret = cs48l32_create_regmap(spi, cs48l32);
sound/soc/codecs/cs48l32.c
3912
regcache_cache_only(cs48l32->regmap, true);
sound/soc/codecs/cs48l32.c
3914
ret = cs48l32_get_reset_gpio(cs48l32);
sound/soc/codecs/cs48l32.c
3918
ret = cs48l32_get_clocks(cs48l32);
sound/soc/codecs/cs48l32.c
3922
static_assert(ARRAY_SIZE(cs48l32_core_supplies) == ARRAY_SIZE(cs48l32->core_supplies));
sound/soc/codecs/cs48l32.c
3923
for (i = 0; i < ARRAY_SIZE(cs48l32->core_supplies); i++)
sound/soc/codecs/cs48l32.c
3924
cs48l32->core_supplies[i].supply = cs48l32_core_supplies[i];
sound/soc/codecs/cs48l32.c
3926
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(cs48l32->core_supplies),
sound/soc/codecs/cs48l32.c
3927
cs48l32->core_supplies);
sound/soc/codecs/cs48l32.c
3931
cs48l32->vdd_d = devm_regulator_get(cs48l32->dev, "vdd-d");
sound/soc/codecs/cs48l32.c
3932
if (IS_ERR(cs48l32->vdd_d))
sound/soc/codecs/cs48l32.c
3933
return dev_err_probe(dev, PTR_ERR(cs48l32->vdd_d), "Failed to request vdd-d\n");
sound/soc/codecs/cs48l32.c
3935
ret = regulator_bulk_enable(ARRAY_SIZE(cs48l32->core_supplies), cs48l32->core_supplies);
sound/soc/codecs/cs48l32.c
3939
ret = regulator_enable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
3945
cs48l32_disable_hard_reset(cs48l32);
sound/soc/codecs/cs48l32.c
3947
regcache_cache_only(cs48l32->regmap, false);
sound/soc/codecs/cs48l32.c
3950
if (!cs48l32->reset_gpio) {
sound/soc/codecs/cs48l32.c
3951
ret = cs48l32_soft_reset(cs48l32);
sound/soc/codecs/cs48l32.c
3956
ret = cs48l32_wait_for_boot(cs48l32);
sound/soc/codecs/cs48l32.c
3958
dev_err(cs48l32->dev, "Device failed initial boot: %d\n", ret);
sound/soc/codecs/cs48l32.c
3962
ret = regmap_read(cs48l32->regmap, CS48L32_DEVID, &hwid);
sound/soc/codecs/cs48l32.c
3974
dev_err_probe(cs48l32->dev, ret, "Unknown device ID: %#x\n", hwid);
sound/soc/codecs/cs48l32.c
3978
ret = regmap_read(cs48l32->regmap, CS48L32_REVID, &rev);
sound/soc/codecs/cs48l32.c
3985
ret = regmap_read(cs48l32->regmap, CS48L32_OTPID, &otp_rev);
sound/soc/codecs/cs48l32.c
3996
ret = cs48l32_apply_patch(cs48l32);
sound/soc/codecs/cs48l32.c
3998
dev_err(cs48l32->dev, "Failed to apply patch %d\n", ret);
sound/soc/codecs/cs48l32.c
4003
ret = regmap_set_bits(cs48l32->regmap, CS48L32_IRQ1_MASK_2, CS48L32_BOOT_DONE_EINT1_MASK);
sound/soc/codecs/cs48l32.c
4005
ret = cs48l32_configure_clk32k(cs48l32);
sound/soc/codecs/cs48l32.c
4009
pm_runtime_set_active(cs48l32->dev);
sound/soc/codecs/cs48l32.c
4010
pm_runtime_set_autosuspend_delay(cs48l32->dev, 100);
sound/soc/codecs/cs48l32.c
4011
pm_runtime_use_autosuspend(cs48l32->dev);
sound/soc/codecs/cs48l32.c
4012
pm_runtime_enable(cs48l32->dev);
sound/soc/codecs/cs48l32.c
4021
clk_disable_unprepare(cs48l32->mclk1);
sound/soc/codecs/cs48l32.c
4023
cs48l32_enable_hard_reset(cs48l32);
sound/soc/codecs/cs48l32.c
4024
regulator_disable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
4026
regulator_bulk_disable(ARRAY_SIZE(cs48l32->core_supplies), cs48l32->core_supplies);
sound/soc/codecs/cs48l32.c
4034
struct cs48l32 *cs48l32 = &cs48l32_codec->core;
sound/soc/codecs/cs48l32.c
4037
if (cs48l32->irq >= 1)
sound/soc/codecs/cs48l32.c
4038
free_irq(cs48l32->irq, cs48l32_codec);
sound/soc/codecs/cs48l32.c
4040
pm_runtime_disable(cs48l32->dev);
sound/soc/codecs/cs48l32.c
4041
regulator_disable(cs48l32->vdd_d);
sound/soc/codecs/cs48l32.c
4042
clk_disable_unprepare(cs48l32->mclk1);
sound/soc/codecs/cs48l32.c
4043
cs48l32_enable_hard_reset(cs48l32);
sound/soc/codecs/cs48l32.c
4044
regulator_bulk_disable(ARRAY_SIZE(cs48l32->core_supplies), cs48l32->core_supplies);
sound/soc/codecs/cs48l32.h
328
struct cs48l32;
sound/soc/codecs/cs48l32.h
358
struct cs48l32 core;
sound/soc/codecs/cs48l32.h
396
int cs48l32_apply_patch(struct cs48l32 *cs48l32);
sound/soc/codecs/cs48l32.h
397
int cs48l32_create_regmap(struct spi_device *spi, struct cs48l32 *cs48l32);