Lines Matching +full:isoc +full:- +full:in

1 // SPDX-License-Identifier: GPL-2.0-only
3 * oxfw.c - a part of driver for OXFW970/971 based devices
37 MODULE_ALIAS("snd-firewire-speakers");
38 MODULE_ALIAS("snd-scs1x");
50 "Onyx-i",
57 err = fw_csr_string(unit->directory, CSR_MODEL,
67 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
76 err = fw_csr_string(fw_dev->config_rom + 5, CSR_VENDOR,
82 err = fw_csr_string(oxfw->unit->directory, CSR_MODEL,
87 err = snd_fw_transaction(oxfw->unit, TCODE_READ_QUADLET_REQUEST,
94 oxfw->quirks |= SND_OXFW_QUIRK_JUMBO_PAYLOAD;
97 if (entry->vendor_id == VENDOR_GRIFFIN || entry->vendor_id == VENDOR_LACIE) {
98 info = (const struct compat_info *)entry->driver_data;
99 d = info->driver_name;
100 v = info->vendor_name;
101 m = info->model_name;
108 strscpy(oxfw->card->driver, d);
109 strscpy(oxfw->card->mixername, m);
110 strscpy(oxfw->card->shortname, m);
112 scnprintf(oxfw->card->longname, sizeof(oxfw->card->longname),
115 fw_dev->config_rom[3], fw_dev->config_rom[4],
116 dev_name(&oxfw->unit->device), 100 << fw_dev->max_speed);
123 struct snd_oxfw *oxfw = card->private_data;
125 if (oxfw->has_output || oxfw->has_input)
128 mutex_destroy(&oxfw->mutex);
129 fw_unit_put(oxfw->unit);
134 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
141 * old firewire-speaker module.
143 if (entry->vendor_id == VENDOR_GRIFFIN)
145 if (entry->vendor_id == VENDOR_LACIE)
152 if (entry->vendor_id == OUI_STANTON) {
153 oxfw->quirks |= SND_OXFW_QUIRK_SCS_TRANSACTION;
154 if (entry->model_id == MODEL_SCS1M)
155 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION;
158 oxfw->midi_input_ports = 0;
159 oxfw->midi_output_ports = 0;
164 if (entry->vendor_id == OUI_APOGEE && entry->model_id == MODEL_DUET_FW) {
165 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION |
173 if (entry->vendor_id == VENDOR_TASCAM) {
174 oxfw->midi_input_ports++;
175 oxfw->midi_output_ports++;
181 fw_csr_iterator_init(&it, fw_dev->config_rom + 5);
191 // value in 'dbs' field of CIP header against its format information.
192 oxfw->quirks |= SND_OXFW_QUIRK_WRONG_DBS;
194 // OXFW971-based models may transfer events by blocking method.
195 if (!(oxfw->quirks & SND_OXFW_QUIRK_JUMBO_PAYLOAD))
196 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION;
200 //mostly half of events in packets than expected.
201 oxfw->quirks |= SND_OXFW_QUIRK_IGNORE_NO_INFO_PACKET |
215 if (entry->vendor_id == VENDOR_LOUD && entry->model_id == 0 && !detect_loud_models(unit))
216 return -ENODEV;
218 err = snd_card_new(&unit->device, -1, NULL, THIS_MODULE, sizeof(*oxfw), &card);
221 card->private_free = oxfw_card_free;
223 oxfw = card->private_data;
224 oxfw->unit = fw_unit_get(unit);
225 dev_set_drvdata(&unit->device, oxfw);
226 oxfw->card = card;
228 mutex_init(&oxfw->mutex);
229 spin_lock_init(&oxfw->lock);
230 init_waitqueue_head(&oxfw->hwdep_wait);
236 if (entry->vendor_id == OUI_OXFORD && entry->model_id == 0x00f970) {
237 oxfw->quirks |= SND_OXFW_QUIRK_STREAM_FORMAT_INFO_UNSUPPORTED |
249 if (oxfw->has_output || oxfw->has_input) {
281 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
283 fcp_bus_reset(oxfw->unit);
285 if (oxfw->has_output || oxfw->has_input) {
286 guard(mutex)(&oxfw->mutex);
290 if (oxfw->quirks & SND_OXFW_QUIRK_SCS_TRANSACTION)
296 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
299 snd_card_free(oxfw->card);
330 // Initial firmware has a quirk to postpone isoc packet transmission during finishing async
333 // into packet at the first isoc cycle after the postpone. Furthermore, the value of SYT
334 // field in CIP header is not reliable as synchronization timing,
341 // Behringer,F-Control Audio 202. The value of SYT field is not reliable at all.
351 // The value of SYT field in CIP header is enough reliable. Both of blocking and non-blocking
355 // Onyx-i series (former models): 0x081216
357 // d.2 pro/d.4 pro (built-in card): Unknown