Lines Matching refs:ctl
625 static int cs_dsp_coeff_base_reg(struct cs_dsp_coeff_ctl *ctl, unsigned int *reg) in cs_dsp_coeff_base_reg() argument
627 const struct cs_dsp_alg_region *alg_region = &ctl->alg_region; in cs_dsp_coeff_base_reg()
628 struct cs_dsp *dsp = ctl->dsp; in cs_dsp_coeff_base_reg()
638 *reg = dsp->ops->region_to_reg(mem, ctl->alg_region.base + ctl->offset); in cs_dsp_coeff_base_reg()
655 int cs_dsp_coeff_write_acked_control(struct cs_dsp_coeff_ctl *ctl, unsigned int event_id) in cs_dsp_coeff_write_acked_control() argument
657 struct cs_dsp *dsp = ctl->dsp; in cs_dsp_coeff_write_acked_control()
665 ret = cs_dsp_coeff_base_reg(ctl, ®); in cs_dsp_coeff_write_acked_control()
670 event_id, ctl->alg_region.alg, in cs_dsp_coeff_write_acked_control()
671 cs_dsp_mem_region_name(ctl->alg_region.type), ctl->offset); in cs_dsp_coeff_write_acked_control()
710 reg, ctl->alg_region.alg, in cs_dsp_coeff_write_acked_control()
711 cs_dsp_mem_region_name(ctl->alg_region.type), in cs_dsp_coeff_write_acked_control()
712 ctl->offset); in cs_dsp_coeff_write_acked_control()
718 static int cs_dsp_coeff_write_ctrl_raw(struct cs_dsp_coeff_ctl *ctl, in cs_dsp_coeff_write_ctrl_raw() argument
721 struct cs_dsp *dsp = ctl->dsp; in cs_dsp_coeff_write_ctrl_raw()
726 ret = cs_dsp_coeff_base_reg(ctl, ®); in cs_dsp_coeff_write_ctrl_raw()
759 int cs_dsp_coeff_write_ctrl(struct cs_dsp_coeff_ctl *ctl, const void *buf, size_t len) in cs_dsp_coeff_write_ctrl() argument
763 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) in cs_dsp_coeff_write_ctrl()
765 else if (buf != ctl->cache) in cs_dsp_coeff_write_ctrl()
766 memcpy(ctl->cache, buf, len); in cs_dsp_coeff_write_ctrl()
768 ctl->set = 1; in cs_dsp_coeff_write_ctrl()
769 if (ctl->enabled && ctl->dsp->running) in cs_dsp_coeff_write_ctrl()
770 ret = cs_dsp_coeff_write_ctrl_raw(ctl, buf, len); in cs_dsp_coeff_write_ctrl()
776 static int cs_dsp_coeff_read_ctrl_raw(struct cs_dsp_coeff_ctl *ctl, void *buf, size_t len) in cs_dsp_coeff_read_ctrl_raw() argument
778 struct cs_dsp *dsp = ctl->dsp; in cs_dsp_coeff_read_ctrl_raw()
783 ret = cs_dsp_coeff_base_reg(ctl, ®); in cs_dsp_coeff_read_ctrl_raw()
816 int cs_dsp_coeff_read_ctrl(struct cs_dsp_coeff_ctl *ctl, void *buf, size_t len) in cs_dsp_coeff_read_ctrl() argument
820 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) { in cs_dsp_coeff_read_ctrl()
821 if (ctl->enabled && ctl->dsp->running) in cs_dsp_coeff_read_ctrl()
822 return cs_dsp_coeff_read_ctrl_raw(ctl, buf, len); in cs_dsp_coeff_read_ctrl()
826 if (!ctl->flags && ctl->enabled && ctl->dsp->running) in cs_dsp_coeff_read_ctrl()
827 ret = cs_dsp_coeff_read_ctrl_raw(ctl, ctl->cache, ctl->len); in cs_dsp_coeff_read_ctrl()
829 if (buf != ctl->cache) in cs_dsp_coeff_read_ctrl()
830 memcpy(buf, ctl->cache, len); in cs_dsp_coeff_read_ctrl()
839 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_coeff_init_control_caches() local
842 list_for_each_entry(ctl, &dsp->ctl_list, list) { in cs_dsp_coeff_init_control_caches()
843 if (!ctl->enabled || ctl->set) in cs_dsp_coeff_init_control_caches()
845 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) in cs_dsp_coeff_init_control_caches()
853 if (!ctl->flags || (ctl->flags & WMFW_CTL_FLAG_READABLE)) { in cs_dsp_coeff_init_control_caches()
854 ret = cs_dsp_coeff_read_ctrl_raw(ctl, ctl->cache, ctl->len); in cs_dsp_coeff_init_control_caches()
865 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_coeff_sync_controls() local
868 list_for_each_entry(ctl, &dsp->ctl_list, list) { in cs_dsp_coeff_sync_controls()
869 if (!ctl->enabled) in cs_dsp_coeff_sync_controls()
871 if (ctl->set && !(ctl->flags & WMFW_CTL_FLAG_VOLATILE)) { in cs_dsp_coeff_sync_controls()
872 ret = cs_dsp_coeff_write_ctrl_raw(ctl, ctl->cache, in cs_dsp_coeff_sync_controls()
873 ctl->len); in cs_dsp_coeff_sync_controls()
885 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_signal_event_controls() local
888 list_for_each_entry(ctl, &dsp->ctl_list, list) { in cs_dsp_signal_event_controls()
889 if (ctl->type != WMFW_CTL_TYPE_HOSTEVENT) in cs_dsp_signal_event_controls()
892 if (!ctl->enabled) in cs_dsp_signal_event_controls()
895 ret = cs_dsp_coeff_write_acked_control(ctl, event); in cs_dsp_signal_event_controls()
899 event, ctl->alg_region.alg, ret); in cs_dsp_signal_event_controls()
903 static void cs_dsp_free_ctl_blk(struct cs_dsp_coeff_ctl *ctl) in cs_dsp_free_ctl_blk() argument
905 kfree(ctl->cache); in cs_dsp_free_ctl_blk()
906 kfree(ctl->subname); in cs_dsp_free_ctl_blk()
907 kfree(ctl); in cs_dsp_free_ctl_blk()
916 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_create_control() local
919 list_for_each_entry(ctl, &dsp->ctl_list, list) { in cs_dsp_create_control()
920 if (ctl->fw_name == dsp->fw_name && in cs_dsp_create_control()
921 ctl->alg_region.alg == alg_region->alg && in cs_dsp_create_control()
922 ctl->alg_region.type == alg_region->type) { in cs_dsp_create_control()
923 if ((!subname && !ctl->subname) || in cs_dsp_create_control()
924 (subname && !strncmp(ctl->subname, subname, ctl->subname_len))) { in cs_dsp_create_control()
925 if (!ctl->enabled) in cs_dsp_create_control()
926 ctl->enabled = 1; in cs_dsp_create_control()
932 ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); in cs_dsp_create_control()
933 if (!ctl) in cs_dsp_create_control()
936 ctl->fw_name = dsp->fw_name; in cs_dsp_create_control()
937 ctl->alg_region = *alg_region; in cs_dsp_create_control()
939 ctl->subname_len = subname_len; in cs_dsp_create_control()
940 ctl->subname = kmemdup(subname, in cs_dsp_create_control()
942 if (!ctl->subname) { in cs_dsp_create_control()
947 ctl->enabled = 1; in cs_dsp_create_control()
948 ctl->set = 0; in cs_dsp_create_control()
949 ctl->dsp = dsp; in cs_dsp_create_control()
951 ctl->flags = flags; in cs_dsp_create_control()
952 ctl->type = type; in cs_dsp_create_control()
953 ctl->offset = offset; in cs_dsp_create_control()
954 ctl->len = len; in cs_dsp_create_control()
955 ctl->cache = kzalloc(ctl->len, GFP_KERNEL); in cs_dsp_create_control()
956 if (!ctl->cache) { in cs_dsp_create_control()
961 list_add(&ctl->list, &dsp->ctl_list); in cs_dsp_create_control()
964 ret = dsp->client_ops->control_add(ctl); in cs_dsp_create_control()
972 list_del(&ctl->list); in cs_dsp_create_control()
973 kfree(ctl->cache); in cs_dsp_create_control()
975 kfree(ctl->subname); in cs_dsp_create_control()
977 kfree(ctl); in cs_dsp_create_control()
1481 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_ctl_fixup_base() local
1483 list_for_each_entry(ctl, &dsp->ctl_list, list) { in cs_dsp_ctl_fixup_base()
1484 if (ctl->fw_name == dsp->fw_name && in cs_dsp_ctl_fixup_base()
1485 alg_region->alg == ctl->alg_region.alg && in cs_dsp_ctl_fixup_base()
1486 alg_region->type == ctl->alg_region.type) { in cs_dsp_ctl_fixup_base()
1487 ctl->alg_region.base = alg_region->base; in cs_dsp_ctl_fixup_base()
2263 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_adsp1_power_down() local
2280 list_for_each_entry(ctl, &dsp->ctl_list, list) in cs_dsp_adsp1_power_down()
2281 ctl->enabled = 0; in cs_dsp_adsp1_power_down()
2540 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_power_down() local
2554 list_for_each_entry(ctl, &dsp->ctl_list, list) in cs_dsp_power_down()
2555 ctl->enabled = 0; in cs_dsp_power_down()
2757 struct cs_dsp_coeff_ctl *ctl; in cs_dsp_remove() local
2760 ctl = list_first_entry(&dsp->ctl_list, struct cs_dsp_coeff_ctl, list); in cs_dsp_remove()
2763 dsp->client_ops->control_remove(ctl); in cs_dsp_remove()
2765 list_del(&ctl->list); in cs_dsp_remove()
2766 cs_dsp_free_ctl_blk(ctl); in cs_dsp_remove()