Lines Matching refs:sigmadsp
93 static int sigmadsp_write(struct sigmadsp *sigmadsp, unsigned int addr, in sigmadsp_write() argument
96 return sigmadsp->write(sigmadsp->control_data, addr, data, len); in sigmadsp_write()
99 static int sigmadsp_read(struct sigmadsp *sigmadsp, unsigned int addr, in sigmadsp_read() argument
102 return sigmadsp->read(sigmadsp->control_data, addr, data, len); in sigmadsp_read()
116 static int sigmadsp_ctrl_write(struct sigmadsp *sigmadsp, in sigmadsp_ctrl_write() argument
120 if (ctrl->num_bytes > 4 && ctrl->num_bytes <= 20 && sigmadsp->ops && in sigmadsp_ctrl_write()
121 sigmadsp->ops->safeload) in sigmadsp_ctrl_write()
122 return sigmadsp->ops->safeload(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
125 return sigmadsp_write(sigmadsp, ctrl->addr, data, in sigmadsp_ctrl_write()
133 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_put() local
137 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_put()
142 ret = sigmadsp_ctrl_write(sigmadsp, ctrl, data); in sigmadsp_ctrl_put()
149 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_put()
158 struct sigmadsp *sigmadsp = snd_kcontrol_chip(kcontrol); in sigmadsp_ctrl_get() local
161 mutex_lock(&sigmadsp->lock); in sigmadsp_ctrl_get()
164 ret = sigmadsp_read(sigmadsp, ctrl->addr, ctrl->cache, in sigmadsp_ctrl_get()
174 mutex_unlock(&sigmadsp->lock); in sigmadsp_ctrl_get()
199 static int sigma_fw_load_control(struct sigmadsp *sigmadsp, in sigma_fw_load_control() argument
240 list_add_tail(&ctrl->head, &sigmadsp->ctrl_list); in sigma_fw_load_control()
250 static int sigma_fw_load_data(struct sigmadsp *sigmadsp, in sigma_fw_load_data() argument
271 list_add_tail(&data->head, &sigmadsp->data_list); in sigma_fw_load_data()
276 static int sigma_fw_load_samplerates(struct sigmadsp *sigmadsp, in sigma_fw_load_samplerates() argument
292 if (sigmadsp->rate_constraints.count) in sigma_fw_load_samplerates()
302 sigmadsp->rate_constraints.count = num_rates; in sigma_fw_load_samplerates()
303 sigmadsp->rate_constraints.list = rates; in sigma_fw_load_samplerates()
308 static int sigmadsp_fw_load_v2(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v2() argument
334 ret = sigma_fw_load_data(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
337 ret = sigma_fw_load_control(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
340 ret = sigma_fw_load_samplerates(sigmadsp, chunk, length); in sigmadsp_fw_load_v2()
343 dev_warn(sigmadsp->dev, "Unknown chunk type: %d\n", in sigmadsp_fw_load_v2()
390 static int process_sigma_action(struct sigmadsp *sigmadsp, in process_sigma_action() argument
413 list_add_tail(&data->head, &sigmadsp->data_list); in process_sigma_action()
424 static int sigmadsp_fw_load_v1(struct sigmadsp *sigmadsp, in sigmadsp_fw_load_v1() argument
441 ret = process_sigma_action(sigmadsp, sa); in sigmadsp_fw_load_v1()
455 static void sigmadsp_firmware_release(struct sigmadsp *sigmadsp) in sigmadsp_firmware_release() argument
460 list_for_each_entry_safe(ctrl, _ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_firmware_release()
465 list_for_each_entry_safe(data, _data, &sigmadsp->data_list, head) in sigmadsp_firmware_release()
468 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_firmware_release()
469 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_firmware_release()
474 sigmadsp_firmware_release((struct sigmadsp *)res); in devm_sigmadsp_release()
477 static int sigmadsp_firmware_load(struct sigmadsp *sigmadsp, const char *name) in sigmadsp_firmware_load() argument
485 ret = request_firmware(&fw, name, sigmadsp->dev); in sigmadsp_firmware_load()
501 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid size\n"); in sigmadsp_firmware_load()
507 dev_err(sigmadsp->dev, "Failed to load firmware: Invalid magic\n"); in sigmadsp_firmware_load()
515 dev_err(sigmadsp->dev, "Failed to load firmware: Wrong crc checksum: expected %x got %x\n", in sigmadsp_firmware_load()
522 ret = sigmadsp_fw_load_v1(sigmadsp, fw); in sigmadsp_firmware_load()
525 ret = sigmadsp_fw_load_v2(sigmadsp, fw); in sigmadsp_firmware_load()
528 dev_err(sigmadsp->dev, in sigmadsp_firmware_load()
536 sigmadsp_firmware_release(sigmadsp); in sigmadsp_firmware_load()
544 static int sigmadsp_init(struct sigmadsp *sigmadsp, struct device *dev, in sigmadsp_init() argument
547 sigmadsp->ops = ops; in sigmadsp_init()
548 sigmadsp->dev = dev; in sigmadsp_init()
550 INIT_LIST_HEAD(&sigmadsp->ctrl_list); in sigmadsp_init()
551 INIT_LIST_HEAD(&sigmadsp->data_list); in sigmadsp_init()
552 mutex_init(&sigmadsp->lock); in sigmadsp_init()
554 return sigmadsp_firmware_load(sigmadsp, firmware_name); in sigmadsp_init()
567 struct sigmadsp *devm_sigmadsp_init(struct device *dev, in devm_sigmadsp_init()
570 struct sigmadsp *sigmadsp; in devm_sigmadsp_init() local
573 sigmadsp = devres_alloc(devm_sigmadsp_release, sizeof(*sigmadsp), in devm_sigmadsp_init()
575 if (!sigmadsp) in devm_sigmadsp_init()
578 ret = sigmadsp_init(sigmadsp, dev, ops, firmware_name); in devm_sigmadsp_init()
580 devres_free(sigmadsp); in devm_sigmadsp_init()
584 devres_add(dev, sigmadsp); in devm_sigmadsp_init()
586 return sigmadsp; in devm_sigmadsp_init()
590 static int sigmadsp_rate_to_index(struct sigmadsp *sigmadsp, unsigned int rate) in sigmadsp_rate_to_index() argument
594 for (i = 0; i < sigmadsp->rate_constraints.count; i++) { in sigmadsp_rate_to_index()
595 if (sigmadsp->rate_constraints.list[i] == rate) in sigmadsp_rate_to_index()
602 static unsigned int sigmadsp_get_samplerate_mask(struct sigmadsp *sigmadsp, in sigmadsp_get_samplerate_mask() argument
610 if (sigmadsp->rate_constraints.count) { in sigmadsp_get_samplerate_mask()
611 samplerate_index = sigmadsp_rate_to_index(sigmadsp, samplerate); in sigmadsp_get_samplerate_mask()
631 static int sigmadsp_alloc_control(struct sigmadsp *sigmadsp, in sigmadsp_alloc_control() argument
648 kcontrol = snd_ctl_new1(&template, sigmadsp); in sigmadsp_alloc_control()
655 return snd_ctl_add(sigmadsp->component->card->snd_card, kcontrol); in sigmadsp_alloc_control()
658 static void sigmadsp_activate_ctrl(struct sigmadsp *sigmadsp, in sigmadsp_activate_ctrl() argument
661 struct snd_card *card = sigmadsp->component->card->snd_card; in sigmadsp_activate_ctrl()
684 mutex_lock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
686 sigmadsp_ctrl_write(sigmadsp, ctrl, ctrl->cache); in sigmadsp_activate_ctrl()
687 mutex_unlock(&sigmadsp->lock); in sigmadsp_activate_ctrl()
705 int sigmadsp_attach(struct sigmadsp *sigmadsp, in sigmadsp_attach() argument
712 sigmadsp->component = component; in sigmadsp_attach()
714 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, in sigmadsp_attach()
715 sigmadsp->current_samplerate); in sigmadsp_attach()
717 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) { in sigmadsp_attach()
718 ret = sigmadsp_alloc_control(sigmadsp, ctrl, samplerate_mask); in sigmadsp_attach()
738 int sigmadsp_setup(struct sigmadsp *sigmadsp, unsigned int samplerate) in sigmadsp_setup() argument
745 if (sigmadsp->current_samplerate == samplerate) in sigmadsp_setup()
748 samplerate_mask = sigmadsp_get_samplerate_mask(sigmadsp, samplerate); in sigmadsp_setup()
752 list_for_each_entry(data, &sigmadsp->data_list, head) { in sigmadsp_setup()
756 ret = sigmadsp_write(sigmadsp, data->addr, data->data, in sigmadsp_setup()
762 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_setup()
763 sigmadsp_activate_ctrl(sigmadsp, ctrl, samplerate_mask); in sigmadsp_setup()
765 sigmadsp->current_samplerate = samplerate; in sigmadsp_setup()
769 sigmadsp_reset(sigmadsp); in sigmadsp_setup()
782 void sigmadsp_reset(struct sigmadsp *sigmadsp) in sigmadsp_reset() argument
786 list_for_each_entry(ctrl, &sigmadsp->ctrl_list, head) in sigmadsp_reset()
787 sigmadsp_activate_ctrl(sigmadsp, ctrl, false); in sigmadsp_reset()
789 sigmadsp->current_samplerate = 0; in sigmadsp_reset()
803 int sigmadsp_restrict_params(struct sigmadsp *sigmadsp, in sigmadsp_restrict_params() argument
806 if (sigmadsp->rate_constraints.count == 0) in sigmadsp_restrict_params()
810 SNDRV_PCM_HW_PARAM_RATE, &sigmadsp->rate_constraints); in sigmadsp_restrict_params()