Lines Matching defs:tscs454
2 // tscs454.c -- TSCS454 ALSA SoC Audio driver
23 #include "tscs454.h"
124 struct tscs454 {
276 static inline int tscs454_data_init(struct tscs454 *tscs454,
282 tscs454->regmap = devm_regmap_init_i2c(i2c, &tscs454_regmap_cfg);
283 if (IS_ERR(tscs454->regmap)) {
284 ret = PTR_ERR(tscs454->regmap);
289 aif_init(&tscs454->aifs[i], i);
291 mutex_init(&tscs454->aifs_status_lock);
292 pll_init(&tscs454->pll1, 1);
293 pll_init(&tscs454->pll2, 2);
295 coeff_ram_init(&tscs454->dac_ram);
296 coeff_ram_init(&tscs454->spk_ram);
297 coeff_ram_init(&tscs454->sub_ram);
312 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
320 coeff_ram = tscs454->dac_ram.cache;
321 coeff_ram_lock = &tscs454->dac_ram.lock;
323 coeff_ram = tscs454->spk_ram.cache;
324 coeff_ram_lock = &tscs454->spk_ram.lock;
326 coeff_ram = tscs454->sub_ram.cache;
327 coeff_ram_lock = &tscs454->sub_ram.lock;
347 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
368 ret = regmap_write(tscs454->regmap, r_addr, coeff_addr);
375 ret = regmap_bulk_write(tscs454->regmap, r_wr,
393 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
408 coeff_ram = tscs454->dac_ram.cache;
409 coeff_ram_lock = &tscs454->dac_ram.lock;
410 coeff_ram_synced = &tscs454->dac_ram.synced;
415 coeff_ram = tscs454->spk_ram.cache;
416 coeff_ram_lock = &tscs454->spk_ram.lock;
417 coeff_ram_synced = &tscs454->spk_ram.synced;
422 coeff_ram = tscs454->sub_ram.cache;
423 coeff_ram_lock = &tscs454->sub_ram.lock;
424 coeff_ram_synced = &tscs454->sub_ram.synced;
439 mutex_lock(&tscs454->pll1.lock);
440 mutex_lock(&tscs454->pll2.lock);
457 mutex_unlock(&tscs454->pll2.lock);
458 mutex_unlock(&tscs454->pll1.lock);
465 struct tscs454 *tscs454)
469 mutex_lock(&tscs454->dac_ram.lock);
470 if (!tscs454->dac_ram.synced) {
471 ret = write_coeff_ram(component, tscs454->dac_ram.cache,
475 mutex_unlock(&tscs454->dac_ram.lock);
479 mutex_unlock(&tscs454->dac_ram.lock);
481 mutex_lock(&tscs454->spk_ram.lock);
482 if (!tscs454->spk_ram.synced) {
483 ret = write_coeff_ram(component, tscs454->spk_ram.cache,
487 mutex_unlock(&tscs454->spk_ram.lock);
491 mutex_unlock(&tscs454->spk_ram.lock);
493 mutex_lock(&tscs454->sub_ram.lock);
494 if (!tscs454->sub_ram.synced) {
495 ret = write_coeff_ram(component, tscs454->sub_ram.cache,
499 mutex_unlock(&tscs454->sub_ram.lock);
503 mutex_unlock(&tscs454->sub_ram.lock);
627 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
633 if (tscs454->sysclk_src_id < PLL_INPUT_BCLK)
634 freq = clk_get_rate(tscs454->sysclk);
636 freq = tscs454->bclk_freq;
679 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
683 mutex_lock(&tscs454->pll1.lock);
684 users = tscs454->pll1.users;
685 mutex_unlock(&tscs454->pll1.lock);
689 mutex_lock(&tscs454->pll2.lock);
690 users = tscs454->pll2.users;
691 mutex_unlock(&tscs454->pll2.lock);
708 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
748 ret = coeff_ram_sync(component, tscs454);
810 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
812 mutex_lock(&tscs454->aifs_status_lock);
816 set_aif_status_inactive(&tscs454->aifs_status, aif->id, playback);
819 aif->id, tscs454->aifs_status.streams);
821 if (!aif_active(&tscs454->aifs_status, aif->id)) {
829 if (!aifs_active(&tscs454->aifs_status)) {
831 tscs454->internal_rate.pll->id);
832 free_pll(tscs454->internal_rate.pll);
835 mutex_unlock(&tscs454->aifs_status_lock);
2637 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
2649 tscs454->bclk_freq = freq;
2887 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
2888 struct aif *aif = &tscs454->aifs[dai->id];
3174 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
3176 struct aif *aif = &tscs454->aifs[dai->id];
3180 mutex_lock(&tscs454->aifs_status_lock);
3185 if (!aif_active(&tscs454->aifs_status, aif->id)) {
3187 aif->pll = &tscs454->pll1;
3189 aif->pll = &tscs454->pll2;
3197 if (!aifs_active(&tscs454->aifs_status)) { /* First active aif */
3200 tscs454->internal_rate.pll = &tscs454->pll1;
3202 tscs454->internal_rate.pll = &tscs454->pll2;
3205 tscs454->internal_rate.pll->id);
3207 reserve_pll(tscs454->internal_rate.pll);
3223 set_aif_status_active(&tscs454->aifs_status, aif->id,
3227 aif->id, tscs454->aifs_status.streams);
3231 mutex_unlock(&tscs454->aifs_status_lock);
3240 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
3241 struct aif *aif = &tscs454->aifs[dai->id];
3252 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
3253 struct aif *aif = &tscs454->aifs[dai->id];
3284 struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
3288 switch (tscs454->sysclk_src_id) {
3314 if (tscs454->sysclk_src_id < PLL_INPUT_BCLK)
3339 .name = "tscs454-dai1",
3359 .name = "tscs454-dai2",
3379 .name = "tscs454-dai3",
3405 struct tscs454 *tscs454;
3409 tscs454 = devm_kzalloc(&i2c->dev, sizeof(*tscs454), GFP_KERNEL);
3410 if (!tscs454)
3413 ret = tscs454_data_init(tscs454, i2c);
3417 i2c_set_clientdata(i2c, tscs454);
3420 tscs454->sysclk = devm_clk_get(&i2c->dev, src_names[src]);
3421 if (!IS_ERR(tscs454->sysclk)) {
3423 } else if (PTR_ERR(tscs454->sysclk) != -ENOENT) {
3424 ret = PTR_ERR(tscs454->sysclk);
3430 tscs454->sysclk_src_id = src;
3432 ret = regmap_write(tscs454->regmap,
3438 regcache_mark_dirty(tscs454->regmap);
3440 ret = regmap_register_patch(tscs454->regmap, tscs454_patch,
3447 regmap_write(tscs454->regmap, R_PAGESEL, 0x00);
3460 { "tscs454", 0 },
3466 { .compatible = "tempo,tscs454", },
3473 .name = "tscs454",