tscs454
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
tscs454->bclk_freq = freq;
static inline int tscs454_data_init(struct tscs454 *tscs454,
tscs454->regmap = devm_regmap_init_i2c(i2c, &tscs454_regmap_cfg);
if (IS_ERR(tscs454->regmap)) {
ret = PTR_ERR(tscs454->regmap);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
struct aif *aif = &tscs454->aifs[dai->id];
aif_init(&tscs454->aifs[i], i);
mutex_init(&tscs454->aifs_status_lock);
pll_init(&tscs454->pll1, 1);
pll_init(&tscs454->pll2, 2);
coeff_ram_init(&tscs454->dac_ram);
coeff_ram_init(&tscs454->spk_ram);
coeff_ram_init(&tscs454->sub_ram);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
struct aif *aif = &tscs454->aifs[dai->id];
mutex_lock(&tscs454->aifs_status_lock);
if (!aif_active(&tscs454->aifs_status, aif->id)) {
aif->pll = &tscs454->pll1;
aif->pll = &tscs454->pll2;
if (!aifs_active(&tscs454->aifs_status)) { /* First active aif */
tscs454->internal_rate.pll = &tscs454->pll1;
tscs454->internal_rate.pll = &tscs454->pll2;
coeff_ram = tscs454->dac_ram.cache;
tscs454->internal_rate.pll->id);
reserve_pll(tscs454->internal_rate.pll);
coeff_ram_lock = &tscs454->dac_ram.lock;
set_aif_status_active(&tscs454->aifs_status, aif->id,
aif->id, tscs454->aifs_status.streams);
mutex_unlock(&tscs454->aifs_status_lock);
coeff_ram = tscs454->spk_ram.cache;
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
struct aif *aif = &tscs454->aifs[dai->id];
coeff_ram_lock = &tscs454->spk_ram.lock;
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
struct aif *aif = &tscs454->aifs[dai->id];
coeff_ram = tscs454->sub_ram.cache;
coeff_ram_lock = &tscs454->sub_ram.lock;
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
switch (tscs454->sysclk_src_id) {
if (tscs454->sysclk_src_id < PLL_INPUT_BCLK)
struct tscs454 *tscs454;
tscs454 = devm_kzalloc(&i2c->dev, sizeof(*tscs454), GFP_KERNEL);
if (!tscs454)
ret = tscs454_data_init(tscs454, i2c);
i2c_set_clientdata(i2c, tscs454);
tscs454->sysclk = devm_clk_get(&i2c->dev, src_names[src]);
if (!IS_ERR(tscs454->sysclk)) {
} else if (PTR_ERR(tscs454->sysclk) != -ENOENT) {
ret = PTR_ERR(tscs454->sysclk);
tscs454->sysclk_src_id = src;
ret = regmap_write(tscs454->regmap,
regcache_mark_dirty(tscs454->regmap);
ret = regmap_register_patch(tscs454->regmap, tscs454_patch,
regmap_write(tscs454->regmap, R_PAGESEL, 0x00);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
ret = regmap_write(tscs454->regmap, r_addr, coeff_addr);
ret = regmap_bulk_write(tscs454->regmap, r_wr,
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
coeff_ram = tscs454->dac_ram.cache;
coeff_ram_lock = &tscs454->dac_ram.lock;
coeff_ram_synced = &tscs454->dac_ram.synced;
coeff_ram = tscs454->spk_ram.cache;
coeff_ram_lock = &tscs454->spk_ram.lock;
coeff_ram_synced = &tscs454->spk_ram.synced;
coeff_ram = tscs454->sub_ram.cache;
coeff_ram_lock = &tscs454->sub_ram.lock;
coeff_ram_synced = &tscs454->sub_ram.synced;
mutex_lock(&tscs454->pll1.lock);
mutex_lock(&tscs454->pll2.lock);
mutex_unlock(&tscs454->pll2.lock);
mutex_unlock(&tscs454->pll1.lock);
struct tscs454 *tscs454)
mutex_lock(&tscs454->dac_ram.lock);
if (!tscs454->dac_ram.synced) {
ret = write_coeff_ram(component, tscs454->dac_ram.cache,
mutex_unlock(&tscs454->dac_ram.lock);
mutex_unlock(&tscs454->dac_ram.lock);
mutex_lock(&tscs454->spk_ram.lock);
if (!tscs454->spk_ram.synced) {
ret = write_coeff_ram(component, tscs454->spk_ram.cache,
mutex_unlock(&tscs454->spk_ram.lock);
mutex_unlock(&tscs454->spk_ram.lock);
mutex_lock(&tscs454->sub_ram.lock);
if (!tscs454->sub_ram.synced) {
ret = write_coeff_ram(component, tscs454->sub_ram.cache,
mutex_unlock(&tscs454->sub_ram.lock);
mutex_unlock(&tscs454->sub_ram.lock);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
if (tscs454->sysclk_src_id < PLL_INPUT_BCLK)
freq = clk_get_rate(tscs454->sysclk);
freq = tscs454->bclk_freq;
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
mutex_lock(&tscs454->pll1.lock);
users = tscs454->pll1.users;
mutex_unlock(&tscs454->pll1.lock);
mutex_lock(&tscs454->pll2.lock);
users = tscs454->pll2.users;
mutex_unlock(&tscs454->pll2.lock);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
ret = coeff_ram_sync(component, tscs454);
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
mutex_lock(&tscs454->aifs_status_lock);
set_aif_status_inactive(&tscs454->aifs_status, aif->id, playback);
aif->id, tscs454->aifs_status.streams);
if (!aif_active(&tscs454->aifs_status, aif->id)) {
if (!aifs_active(&tscs454->aifs_status)) {
tscs454->internal_rate.pll->id);
free_pll(tscs454->internal_rate.pll);
mutex_unlock(&tscs454->aifs_status_lock);