Lines Matching defs:oxfw

3  * oxfw.c - a part of driver for OXFW970/971 based devices
8 #include "oxfw.h"
63 static int name_card(struct snd_oxfw *oxfw)
65 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
80 err = fw_csr_string(oxfw->unit->directory, CSR_MODEL,
85 err = snd_fw_transaction(oxfw->unit, TCODE_READ_QUADLET_REQUEST,
92 if (oxfw->entry->vendor_id == VENDOR_GRIFFIN ||
93 oxfw->entry->vendor_id == VENDOR_LACIE) {
94 info = (const struct compat_info *)oxfw->entry->driver_data;
104 strcpy(oxfw->card->driver, d);
105 strcpy(oxfw->card->mixername, m);
106 strcpy(oxfw->card->shortname, m);
108 snprintf(oxfw->card->longname, sizeof(oxfw->card->longname),
112 dev_name(&oxfw->unit->device), 100 << fw_dev->max_speed);
119 struct snd_oxfw *oxfw = card->private_data;
121 if (oxfw->has_output || oxfw->has_input)
122 snd_oxfw_stream_destroy_duplex(oxfw);
125 static int detect_quirks(struct snd_oxfw *oxfw)
127 struct fw_device *fw_dev = fw_parent_device(oxfw->unit);
136 if (oxfw->entry->vendor_id == VENDOR_GRIFFIN)
137 return snd_oxfw_add_spkr(oxfw, false);
138 if (oxfw->entry->vendor_id == VENDOR_LACIE)
139 return snd_oxfw_add_spkr(oxfw, true);
145 if (oxfw->entry->vendor_id == OUI_STANTON) {
147 oxfw->midi_input_ports = 0;
148 oxfw->midi_output_ports = 0;
150 return snd_oxfw_scs1x_add(oxfw);
157 if (oxfw->entry->vendor_id == VENDOR_TASCAM) {
158 oxfw->midi_input_ports++;
159 oxfw->midi_output_ports++;
178 oxfw->wrong_dbs = true;
185 struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
188 if (oxfw->registered)
191 err = snd_card_new(&oxfw->unit->device, -1, NULL, THIS_MODULE, 0,
192 &oxfw->card);
195 oxfw->card->private_free = oxfw_card_free;
196 oxfw->card->private_data = oxfw;
198 err = name_card(oxfw);
202 err = snd_oxfw_stream_discover(oxfw);
206 err = detect_quirks(oxfw);
210 if (oxfw->has_output || oxfw->has_input) {
211 err = snd_oxfw_stream_init_duplex(oxfw);
215 err = snd_oxfw_create_pcm(oxfw);
219 snd_oxfw_proc_init(oxfw);
221 err = snd_oxfw_create_midi(oxfw);
225 err = snd_oxfw_create_hwdep(oxfw);
230 err = snd_card_register(oxfw->card);
234 oxfw->registered = true;
238 snd_card_free(oxfw->card);
239 dev_info(&oxfw->unit->device,
246 struct snd_oxfw *oxfw;
252 oxfw = devm_kzalloc(&unit->device, sizeof(struct snd_oxfw), GFP_KERNEL);
253 if (!oxfw)
255 oxfw->unit = fw_unit_get(unit);
256 dev_set_drvdata(&unit->device, oxfw);
258 oxfw->entry = entry;
259 mutex_init(&oxfw->mutex);
260 spin_lock_init(&oxfw->lock);
261 init_waitqueue_head(&oxfw->hwdep_wait);
264 INIT_DEFERRABLE_WORK(&oxfw->dwork, do_registration);
265 snd_fw_schedule_registration(unit, &oxfw->dwork);
272 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
274 if (!oxfw->registered)
275 snd_fw_schedule_registration(unit, &oxfw->dwork);
277 fcp_bus_reset(oxfw->unit);
279 if (oxfw->registered) {
280 if (oxfw->has_output || oxfw->has_input) {
281 mutex_lock(&oxfw->mutex);
282 snd_oxfw_stream_update_duplex(oxfw);
283 mutex_unlock(&oxfw->mutex);
286 if (oxfw->entry->vendor_id == OUI_STANTON)
287 snd_oxfw_scs1x_update(oxfw);
293 struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device);
300 cancel_delayed_work_sync(&oxfw->dwork);
302 if (oxfw->registered) {
304 snd_card_free(oxfw->card);
307 mutex_destroy(&oxfw->mutex);
308 fw_unit_put(oxfw->unit);