if (chip) { if (chip->pcm)
usb6fire_pcm_destroy(chip); if (chip->midi)
usb6fire_midi_destroy(chip); if (chip->comm)
usb6fire_comm_destroy(chip); if (chip->control)
usb6fire_control_destroy(chip);
}
}
staticint usb6fire_chip_probe(struct usb_interface *intf, conststruct usb_device_id *usb_id)
{ int ret; int i; struct sfire_chip *chip = NULL; struct usb_device *device = interface_to_usbdev(intf); int regidx = -1; /* index in module parameter array */ struct snd_card *card = NULL;
/* look if we already serve this card and return if so */
mutex_lock(®ister_mutex); for (i = 0; i < SNDRV_CARDS; i++) { if (devices[i] == device) { if (chips[i])
chips[i]->intf_count++;
usb_set_intfdata(intf, chips[i]);
mutex_unlock(®ister_mutex); return 0;
} elseif (!devices[i] && regidx < 0)
regidx = i;
} if (regidx < 0) {
mutex_unlock(®ister_mutex);
dev_err(&intf->dev, "too many cards registered.\n"); return -ENODEV;
}
devices[regidx] = device;
mutex_unlock(®ister_mutex);
/* check, if firmware is present on device, upload it if not */
ret = usb6fire_fw_init(intf); if (ret < 0) return ret; elseif (ret == FW_NOT_READY) /* firmware update performed */ return 0;
/* if we are here, card can be registered in alsa. */ if (usb_set_interface(device, 0, 0) != 0) {
dev_err(&intf->dev, "can't set first interface.\n"); return -EIO;
}
ret = snd_card_new(&intf->dev, index[regidx], id[regidx],
THIS_MODULE, sizeof(struct sfire_chip), &card); if (ret < 0) {
dev_err(&intf->dev, "cannot create alsa card.\n"); return ret;
}
strscpy(card->driver, "6FireUSB");
strscpy(card->shortname, "TerraTec DMX6FireUSB");
sprintf(card->longname, "%s at %d:%d", card->shortname,
device->bus->busnum, device->devnum);
chip = usb_get_intfdata(intf); if (chip) { /* if !chip, fw upload has been performed */
chip->intf_count--; if (!chip->intf_count) {
mutex_lock(®ister_mutex);
devices[chip->regidx] = NULL;
chips[chip->regidx] = NULL;
mutex_unlock(®ister_mutex);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.