Lines Matching defs:sigmadsp

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