Lines Matching refs:sigmadsp

95 static int sigmadsp_write(struct sigmadsp *sigmadsp, unsigned int addr,  in sigmadsp_write()  argument
98 return sigmadsp->write(sigmadsp->control_data, addr, data, len); in sigmadsp_write()
101 static int sigmadsp_read(struct sigmadsp *sigmadsp, unsigned int addr, in sigmadsp_read() argument
104 return sigmadsp->read(sigmadsp->control_data, addr, data, len); in sigmadsp_read()
118 static int sigmadsp_ctrl_write(struct sigmadsp *sigmadsp, in sigmadsp_ctrl_write() argument
122 if (ctrl->num_bytes <= 20 && sigmadsp->ops && sigmadsp->ops->safeload) in sigmadsp_ctrl_write()
123 return sigmadsp->ops->safeload(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
126 return sigmadsp_write(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
134 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_put() local
138 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_put()
143 ret = sigmadsp_ctrl_write(sigmadsp, ctrl, data); in sigmadsp_ctrl_put()
151 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_put()
160 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_get() local
163 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_get()
166 ret = sigmadsp_read(sigmadsp, ctrl->addr, ctrl->cache, in sigmadsp_ctrl_get()
177 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_get()
202 static int sigma_fw_load_control(struct sigmadsp *sigmadsp, in sigma_fw_load_control() argument
250 list_add_tail(&ctrl->head, &sigmadsp->ctrl_list); in sigma_fw_load_control()
260 static int sigma_fw_load_data(struct sigmadsp *sigmadsp, in sigma_fw_load_data() argument
281 list_add_tail(&data->head, &sigmadsp->data_list); in sigma_fw_load_data()
286 static int sigma_fw_load_samplerates(struct sigmadsp *sigmadsp, in sigma_fw_load_samplerates() argument
302 if (sigmadsp->rate_constraints.count) in sigma_fw_load_samplerates()
312 sigmadsp->rate_constraints.count = num_rates; in sigma_fw_load_samplerates()
313 sigmadsp->rate_constraints.list = rates; in sigma_fw_load_samplerates()
318 static int sigmadsp_fw_load_v2(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v2() argument
344 ret = sigma_fw_load_data(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
347 ret = sigma_fw_load_control(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
350 ret = sigma_fw_load_samplerates(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
353 dev_warn(sigmadsp->dev, "Unknown chunk type: %d\n", in sigmadsp_fw_load_v2()
400 static int process_sigma_action(struct sigmadsp *sigmadsp, in process_sigma_action() argument
423 list_add_tail(&data->head, &sigmadsp->data_list); in process_sigma_action()
434 static int sigmadsp_fw_load_v1(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v1() argument
451 ret = process_sigma_action(sigmadsp, sa); in sigmadsp_fw_load_v1()
465 static void sigmadsp_firmware_release(struct sigmadsp *sigmadsp) in sigmadsp_firmware_release() argument
470 list_for_each_entry_safe(ctrl, _ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_firmware_release()
475 list_for_each_entry_safe(data, _data, &sigmadsp->data_list, head) in sigmadsp_firmware_release()
478 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_firmware_release()
479 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_firmware_release()
484 sigmadsp_firmware_release((struct sigmadsp *)res); in devm_sigmadsp_release()
487 static int sigmadsp_firmware_load(struct sigmadsp *sigmadsp, const char *name) in sigmadsp_firmware_load() argument
495 ret = request_firmware(&fw, name, sigmadsp->dev); in sigmadsp_firmware_load()
511 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid size\n"); in sigmadsp_firmware_load()
517 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid magic\n"); in sigmadsp_firmware_load()
525 dev_err(sigmadsp->dev, "Failed to load firmware: Wrong crc checksum: expected %x got %x\n", in sigmadsp_firmware_load()
532 ret = sigmadsp_fw_load_v1(sigmadsp, fw); in sigmadsp_firmware_load()
535 ret = sigmadsp_fw_load_v2(sigmadsp, fw); in sigmadsp_firmware_load()
538 dev_err(sigmadsp->dev, in sigmadsp_firmware_load()
546 sigmadsp_firmware_release(sigmadsp); in sigmadsp_firmware_load()
554 static int sigmadsp_init(struct sigmadsp *sigmadsp, struct device *dev, in sigmadsp_init() argument
557 sigmadsp->ops = ops; in sigmadsp_init()
558 sigmadsp->dev = dev; in sigmadsp_init()
560 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_init()
561 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_init()
562 mutex_init(&sigmadsp->lock); in sigmadsp_init()
564 return sigmadsp_firmware_load(sigmadsp, firmware_name); in sigmadsp_init()
577 struct sigmadsp *devm_sigmadsp_init(struct device *dev, in devm_sigmadsp_init()
580 struct sigmadsp *sigmadsp; in devm_sigmadsp_init() local
583 sigmadsp = devres_alloc(devm_sigmadsp_release, sizeof(*sigmadsp), in devm_sigmadsp_init()
585 if (!sigmadsp) in devm_sigmadsp_init()
588 ret = sigmadsp_init(sigmadsp, dev, ops, firmware_name); in devm_sigmadsp_init()
590 devres_free(sigmadsp); in devm_sigmadsp_init()
594 devres_add(dev, sigmadsp); in devm_sigmadsp_init()
596 return sigmadsp; in devm_sigmadsp_init()
600 static int sigmadsp_rate_to_index(struct sigmadsp *sigmadsp, unsigned int rate) in sigmadsp_rate_to_index() argument
604 for (i = 0; i < sigmadsp->rate_constraints.count; i++) { in sigmadsp_rate_to_index()
605 if (sigmadsp->rate_constraints.list[i] == rate) in sigmadsp_rate_to_index()
612 static unsigned int sigmadsp_get_samplerate_mask(struct sigmadsp *sigmadsp, in sigmadsp_get_samplerate_mask() argument
620 if (sigmadsp->rate_constraints.count) { in sigmadsp_get_samplerate_mask()
621 samplerate_index = sigmadsp_rate_to_index(sigmadsp, samplerate); in sigmadsp_get_samplerate_mask()
641 static int sigmadsp_alloc_control(struct sigmadsp *sigmadsp, in sigmadsp_alloc_control() argument
658 kcontrol = snd_ctl_new1(&template, sigmadsp); in sigmadsp_alloc_control()
665 return snd_ctl_add(sigmadsp->component->card->snd_card, kcontrol); in sigmadsp_alloc_control()
668 static void sigmadsp_activate_ctrl(struct sigmadsp *sigmadsp, in sigmadsp_activate_ctrl() argument
671 struct snd_card *card = sigmadsp->component->card->snd_card; in sigmadsp_activate_ctrl()
680 mutex_lock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
682 sigmadsp_ctrl_write(sigmadsp, ctrl, ctrl->cache); in sigmadsp_activate_ctrl()
683 mutex_unlock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
698 int sigmadsp_attach(struct sigmadsp *sigmadsp, in sigmadsp_attach() argument
705 sigmadsp->component = component; in sigmadsp_attach()
707 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, in sigmadsp_attach()
708 sigmadsp->current_samplerate); in sigmadsp_attach()
710 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_attach()
711 ret = sigmadsp_alloc_control(sigmadsp, ctrl, samplerate_mask); in sigmadsp_attach()
731 int sigmadsp_setup(struct sigmadsp *sigmadsp, unsigned int samplerate) in sigmadsp_setup() argument
738 if (sigmadsp->current_samplerate == samplerate) in sigmadsp_setup()
741 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, samplerate); in sigmadsp_setup()
745 list_for_each_entry(data, &sigmadsp->data_list, head) { in sigmadsp_setup()
749 ret = sigmadsp_write(sigmadsp, data->addr, data->data, in sigmadsp_setup()
755 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_setup()
756 sigmadsp_activate_ctrl(sigmadsp, ctrl, samplerate_mask); in sigmadsp_setup()
758 sigmadsp->current_samplerate = samplerate; in sigmadsp_setup()
762 sigmadsp_reset(sigmadsp); in sigmadsp_setup()
775 void sigmadsp_reset(struct sigmadsp *sigmadsp) in sigmadsp_reset() argument
779 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_reset()
780 sigmadsp_activate_ctrl(sigmadsp, ctrl, false); in sigmadsp_reset()
782 sigmadsp->current_samplerate = 0; in sigmadsp_reset()
796 int sigmadsp_restrict_params(struct sigmadsp *sigmadsp, in sigmadsp_restrict_params() argument
799 if (sigmadsp->rate_constraints.count == 0) in sigmadsp_restrict_params()
803 SNDRV_PCM_HW_PARAM_RATE, &sigmadsp->rate_constraints); in sigmadsp_restrict_params()