Lines Matching refs:sigmadsp

92 static int sigmadsp_write(struct sigmadsp *sigmadsp, unsigned int addr,  in sigmadsp_write()  argument
95 return sigmadsp->write(sigmadsp->control_data, addr, data, len); in sigmadsp_write()
98 static int sigmadsp_read(struct sigmadsp *sigmadsp, unsigned int addr, in sigmadsp_read() argument
101 return sigmadsp->read(sigmadsp->control_data, addr, data, len); in sigmadsp_read()
115 static int sigmadsp_ctrl_write(struct sigmadsp *sigmadsp, in sigmadsp_ctrl_write() argument
119 if (ctrl->num_bytes <= 20 && sigmadsp->ops && sigmadsp->ops->safeload) in sigmadsp_ctrl_write()
120 return sigmadsp->ops->safeload(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
123 return sigmadsp_write(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
131 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_put() local
135 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_put()
140 ret = sigmadsp_ctrl_write(sigmadsp, ctrl, data); in sigmadsp_ctrl_put()
147 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_put()
156 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_get() local
159 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_get()
162 ret = sigmadsp_read(sigmadsp, ctrl->addr, ctrl->cache, in sigmadsp_ctrl_get()
172 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_get()
197 static int sigma_fw_load_control(struct sigmadsp *sigmadsp, in sigma_fw_load_control() argument
238 list_add_tail(&ctrl->head, &sigmadsp->ctrl_list); in sigma_fw_load_control()
248 static int sigma_fw_load_data(struct sigmadsp *sigmadsp, in sigma_fw_load_data() argument
269 list_add_tail(&data->head, &sigmadsp->data_list); in sigma_fw_load_data()
274 static int sigma_fw_load_samplerates(struct sigmadsp *sigmadsp, in sigma_fw_load_samplerates() argument
290 if (sigmadsp->rate_constraints.count) in sigma_fw_load_samplerates()
300 sigmadsp->rate_constraints.count = num_rates; in sigma_fw_load_samplerates()
301 sigmadsp->rate_constraints.list = rates; in sigma_fw_load_samplerates()
306 static int sigmadsp_fw_load_v2(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v2() argument
332 ret = sigma_fw_load_data(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
335 ret = sigma_fw_load_control(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
338 ret = sigma_fw_load_samplerates(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
341 dev_warn(sigmadsp->dev, "Unknown chunk type: %d\n", in sigmadsp_fw_load_v2()
388 static int process_sigma_action(struct sigmadsp *sigmadsp, in process_sigma_action() argument
411 list_add_tail(&data->head, &sigmadsp->data_list); in process_sigma_action()
422 static int sigmadsp_fw_load_v1(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v1() argument
439 ret = process_sigma_action(sigmadsp, sa); in sigmadsp_fw_load_v1()
453 static void sigmadsp_firmware_release(struct sigmadsp *sigmadsp) in sigmadsp_firmware_release() argument
458 list_for_each_entry_safe(ctrl, _ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_firmware_release()
463 list_for_each_entry_safe(data, _data, &sigmadsp->data_list, head) in sigmadsp_firmware_release()
466 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_firmware_release()
467 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_firmware_release()
472 sigmadsp_firmware_release((struct sigmadsp *)res); in devm_sigmadsp_release()
475 static int sigmadsp_firmware_load(struct sigmadsp *sigmadsp, const char *name) in sigmadsp_firmware_load() argument
483 ret = request_firmware(&fw, name, sigmadsp->dev); in sigmadsp_firmware_load()
499 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid size\n"); in sigmadsp_firmware_load()
505 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid magic\n"); in sigmadsp_firmware_load()
513 dev_err(sigmadsp->dev, "Failed to load firmware: Wrong crc checksum: expected %x got %x\n", in sigmadsp_firmware_load()
520 ret = sigmadsp_fw_load_v1(sigmadsp, fw); in sigmadsp_firmware_load()
523 ret = sigmadsp_fw_load_v2(sigmadsp, fw); in sigmadsp_firmware_load()
526 dev_err(sigmadsp->dev, in sigmadsp_firmware_load()
534 sigmadsp_firmware_release(sigmadsp); in sigmadsp_firmware_load()
542 static int sigmadsp_init(struct sigmadsp *sigmadsp, struct device *dev, in sigmadsp_init() argument
545 sigmadsp->ops = ops; in sigmadsp_init()
546 sigmadsp->dev = dev; in sigmadsp_init()
548 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_init()
549 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_init()
550 mutex_init(&sigmadsp->lock); in sigmadsp_init()
552 return sigmadsp_firmware_load(sigmadsp, firmware_name); in sigmadsp_init()
565 struct sigmadsp *devm_sigmadsp_init(struct device *dev, in devm_sigmadsp_init()
568 struct sigmadsp *sigmadsp; in devm_sigmadsp_init() local
571 sigmadsp = devres_alloc(devm_sigmadsp_release, sizeof(*sigmadsp), in devm_sigmadsp_init()
573 if (!sigmadsp) in devm_sigmadsp_init()
576 ret = sigmadsp_init(sigmadsp, dev, ops, firmware_name); in devm_sigmadsp_init()
578 devres_free(sigmadsp); in devm_sigmadsp_init()
582 devres_add(dev, sigmadsp); in devm_sigmadsp_init()
584 return sigmadsp; in devm_sigmadsp_init()
588 static int sigmadsp_rate_to_index(struct sigmadsp *sigmadsp, unsigned int rate) in sigmadsp_rate_to_index() argument
592 for (i = 0; i < sigmadsp->rate_constraints.count; i++) { in sigmadsp_rate_to_index()
593 if (sigmadsp->rate_constraints.list[i] == rate) in sigmadsp_rate_to_index()
600 static unsigned int sigmadsp_get_samplerate_mask(struct sigmadsp *sigmadsp, in sigmadsp_get_samplerate_mask() argument
608 if (sigmadsp->rate_constraints.count) { in sigmadsp_get_samplerate_mask()
609 samplerate_index = sigmadsp_rate_to_index(sigmadsp, samplerate); in sigmadsp_get_samplerate_mask()
629 static int sigmadsp_alloc_control(struct sigmadsp *sigmadsp, in sigmadsp_alloc_control() argument
646 kcontrol = snd_ctl_new1(&template, sigmadsp); in sigmadsp_alloc_control()
653 return snd_ctl_add(sigmadsp->component->card->snd_card, kcontrol); in sigmadsp_alloc_control()
656 static void sigmadsp_activate_ctrl(struct sigmadsp *sigmadsp, in sigmadsp_activate_ctrl() argument
659 struct snd_card *card = sigmadsp->component->card->snd_card; in sigmadsp_activate_ctrl()
682 mutex_lock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
684 sigmadsp_ctrl_write(sigmadsp, ctrl, ctrl->cache); in sigmadsp_activate_ctrl()
685 mutex_unlock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
703 int sigmadsp_attach(struct sigmadsp *sigmadsp, in sigmadsp_attach() argument
710 sigmadsp->component = component; in sigmadsp_attach()
712 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, in sigmadsp_attach()
713 sigmadsp->current_samplerate); in sigmadsp_attach()
715 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_attach()
716 ret = sigmadsp_alloc_control(sigmadsp, ctrl, samplerate_mask); in sigmadsp_attach()
736 int sigmadsp_setup(struct sigmadsp *sigmadsp, unsigned int samplerate) in sigmadsp_setup() argument
743 if (sigmadsp->current_samplerate == samplerate) in sigmadsp_setup()
746 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, samplerate); in sigmadsp_setup()
750 list_for_each_entry(data, &sigmadsp->data_list, head) { in sigmadsp_setup()
754 ret = sigmadsp_write(sigmadsp, data->addr, data->data, in sigmadsp_setup()
760 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_setup()
761 sigmadsp_activate_ctrl(sigmadsp, ctrl, samplerate_mask); in sigmadsp_setup()
763 sigmadsp->current_samplerate = samplerate; in sigmadsp_setup()
767 sigmadsp_reset(sigmadsp); in sigmadsp_setup()
780 void sigmadsp_reset(struct sigmadsp *sigmadsp) in sigmadsp_reset() argument
784 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_reset()
785 sigmadsp_activate_ctrl(sigmadsp, ctrl, false); in sigmadsp_reset()
787 sigmadsp->current_samplerate = 0; in sigmadsp_reset()
801 int sigmadsp_restrict_params(struct sigmadsp *sigmadsp, in sigmadsp_restrict_params() argument
804 if (sigmadsp->rate_constraints.count == 0) in sigmadsp_restrict_params()
808 SNDRV_PCM_HW_PARAM_RATE, &sigmadsp->rate_constraints); in sigmadsp_restrict_params()