Lines Matching defs:oxfw

3  * oxfw.c - a part of driver for OXFW970/971 based devices
8 #include "oxfw.h"
64 static int name_card(struct snd_oxfw *oxfw, const struct ieee1394_device_id *entry)
66 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
81 err = fw_csr_string(oxfw->unit->directory, CSR_MODEL,
86 err = snd_fw_transaction(oxfw->unit, TCODE_READ_QUADLET_REQUEST,
93 oxfw->quirks |= SND_OXFW_QUIRK_JUMBO_PAYLOAD;
107 strcpy(oxfw->card->driver, d);
108 strcpy(oxfw->card->mixername, m);
109 strcpy(oxfw->card->shortname, m);
111 scnprintf(oxfw->card->longname, sizeof(oxfw->card->longname),
115 dev_name(&oxfw->unit->device), 100 << fw_dev->max_speed);
122 struct snd_oxfw *oxfw = card->private_data;
124 if (oxfw->has_output || oxfw->has_input)
125 snd_oxfw_stream_destroy_duplex(oxfw);
127 mutex_destroy(&oxfw->mutex);
128 fw_unit_put(oxfw->unit);
131 static int detect_quirks(struct snd_oxfw *oxfw, const struct ieee1394_device_id *entry)
133 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
143 return snd_oxfw_add_spkr(oxfw, false);
145 return snd_oxfw_add_spkr(oxfw, true);
152 oxfw->quirks |= SND_OXFW_QUIRK_SCS_TRANSACTION;
154 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION;
157 oxfw->midi_input_ports = 0;
158 oxfw->midi_output_ports = 0;
160 return snd_oxfw_scs1x_add(oxfw);
164 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION |
173 oxfw->midi_input_ports++;
174 oxfw->midi_output_ports++;
191 oxfw->quirks |= SND_OXFW_QUIRK_WRONG_DBS;
194 if (!(oxfw->quirks & SND_OXFW_QUIRK_JUMBO_PAYLOAD))
195 oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION;
200 oxfw->quirks |= SND_OXFW_QUIRK_IGNORE_NO_INFO_PACKET |
211 struct snd_oxfw *oxfw;
217 err = snd_card_new(&unit->device, -1, NULL, THIS_MODULE, sizeof(*oxfw), &card);
222 oxfw = card->private_data;
223 oxfw->unit = fw_unit_get(unit);
224 dev_set_drvdata(&unit->device, oxfw);
225 oxfw->card = card;
227 mutex_init(&oxfw->mutex);
228 spin_lock_init(&oxfw->lock);
229 init_waitqueue_head(&oxfw->hwdep_wait);
231 err = name_card(oxfw, entry);
235 err = snd_oxfw_stream_discover(oxfw);
239 err = detect_quirks(oxfw, entry);
243 if (oxfw->has_output || oxfw->has_input) {
244 err = snd_oxfw_stream_init_duplex(oxfw);
248 err = snd_oxfw_create_pcm(oxfw);
252 snd_oxfw_proc_init(oxfw);
254 err = snd_oxfw_create_midi(oxfw);
258 err = snd_oxfw_create_hwdep(oxfw);
275 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
277 fcp_bus_reset(oxfw->unit);
279 if (oxfw->has_output || oxfw->has_input) {
280 mutex_lock(&oxfw->mutex);
281 snd_oxfw_stream_update_duplex(oxfw);
282 mutex_unlock(&oxfw->mutex);
285 if (oxfw->quirks & SND_OXFW_QUIRK_SCS_TRANSACTION)
286 snd_oxfw_scs1x_update(oxfw);
291 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
294 snd_card_free(oxfw->card);