int init_module(void) { struct net_device *dev; int i, num = 0, err = 0; for (i = 0; i < ISATR_MAX_ADAPTERS ; i++) { dev = alloc_trdev(sizeof(struct net_local)); if (!dev) continue; dev->base_addr = io[i]; dev->irq = irq[i]; dev->dma = dma[i]; err = setup_card(dev); if (!err) { proteon_dev[i] = dev; ++num; } else { free_netdev(dev); } } printk(KERN_NOTICE "proteon.c: %d cards found.\n", num); /* Probe for cards. */ if (num == 0) { printk(KERN_NOTICE "proteon.c: No cards found.\n"); return (-ENODEV); } return (0); }
int init_module(void) { int i, num; num = 0; if (io[0]) { /* Only probe addresses from command line */ for (i = 0; i < ISATR_MAX_ADAPTERS ; i++) { if (io[i] && setup_card(io[i], irq[i], dma[i]) == 0) num++; } } else { for(i = 0; num < ISATR_MAX_ADAPTERS && portlist[i]; i++) { if (setup_card(portlist[i], irq[num], dma[num]) == 0) num++; } } printk(KERN_NOTICE "proteon.c: %d cards found.\n", num); /* Probe for cards. */ if (num == 0) { printk(KERN_NOTICE "proteon.c: No cards found.\n"); return (-ENODEV); } return (0); }
static int __init sk_isa_init(void) { struct net_device *dev; struct platform_device *pdev; int i, num = 0, err = 0; sk_isa_netdev_ops = tms380tr_netdev_ops; sk_isa_netdev_ops.ndo_open = sk_isa_open; sk_isa_netdev_ops.ndo_stop = tms380tr_close; err = platform_driver_register(&sk_isa_driver); if (err) return err; for (i = 0; i < ISATR_MAX_ADAPTERS ; i++) { dev = alloc_trdev(sizeof(struct net_local)); if (!dev) continue; dev->base_addr = io[i]; dev->irq = irq[i]; dev->dma = dma[i]; pdev = platform_device_register_simple("skisa", i, NULL, 0); if (IS_ERR(pdev)) { free_netdev(dev); continue; } err = setup_card(dev, &pdev->dev); if (!err) { sk_isa_dev[i] = pdev; platform_set_drvdata(sk_isa_dev[i], dev); ++num; } else { platform_device_unregister(pdev); free_netdev(dev); } } printk(KERN_NOTICE "skisa.c: %d cards found.\n", num); /* Probe for cards. */ if (num == 0) { printk(KERN_NOTICE "skisa.c: No cards found.\n"); platform_driver_unregister(&sk_isa_driver); return -ENODEV; } return 0; }
struct net_device * __init proteon_probe(int unit) { struct net_device *dev = alloc_trdev(sizeof(struct net_local)); int err = 0; if (!dev) return ERR_PTR(-ENOMEM); if (unit >= 0) { sprintf(dev->name, "tr%d", unit); netdev_boot_setup_check(dev); } err = setup_card(dev); if (err) goto out; return dev; out: free_netdev(dev); return ERR_PTR(err); }
static int __devinit init_card(struct snd_usb_caiaqdev *dev) { char *c; struct usb_device *usb_dev = dev->chip.dev; struct snd_card *card = dev->chip.card; int err, len; if (usb_set_interface(usb_dev, 0, 1) != 0) { log("can't set alt interface.\n"); return -EIO; } usb_init_urb(&dev->ep1_in_urb); usb_init_urb(&dev->midi_out_urb); usb_fill_bulk_urb(&dev->ep1_in_urb, usb_dev, usb_rcvbulkpipe(usb_dev, 0x1), dev->ep1_in_buf, EP1_BUFSIZE, usb_ep1_command_reply_dispatch, dev); usb_fill_bulk_urb(&dev->midi_out_urb, usb_dev, usb_sndbulkpipe(usb_dev, 0x1), dev->midi_out_buf, EP1_BUFSIZE, snd_usb_caiaq_midi_output_done, dev); init_waitqueue_head(&dev->ep1_wait_queue); init_waitqueue_head(&dev->prepare_wait_queue); if (usb_submit_urb(&dev->ep1_in_urb, GFP_KERNEL) != 0) return -EIO; err = snd_usb_caiaq_send_command(dev, EP1_CMD_GET_DEVICE_INFO, NULL, 0); if (err) return err; if (!wait_event_timeout(dev->ep1_wait_queue, dev->spec_received, HZ)) return -ENODEV; usb_string(usb_dev, usb_dev->descriptor.iManufacturer, dev->vendor_name, CAIAQ_USB_STR_LEN); usb_string(usb_dev, usb_dev->descriptor.iProduct, dev->product_name, CAIAQ_USB_STR_LEN); usb_string(usb_dev, usb_dev->descriptor.iSerialNumber, dev->serial, CAIAQ_USB_STR_LEN); /* terminate serial string at first white space occurence */ c = strchr(dev->serial, ' '); if (c) *c = '\0'; strcpy(card->driver, MODNAME); strcpy(card->shortname, dev->product_name); len = snprintf(card->longname, sizeof(card->longname), "%s %s (serial %s, ", dev->vendor_name, dev->product_name, dev->serial); if (len < sizeof(card->longname) - 2) len += usb_make_path(usb_dev, card->longname + len, sizeof(card->longname) - len); card->longname[len++] = ')'; card->longname[len] = '\0'; setup_card(dev); return 0; }
static int init_card(struct snd_usb_caiaqdev *dev) { char *c, usbpath[32]; struct usb_device *usb_dev = dev->chip.dev; struct snd_card *card = dev->chip.card; int err, len; if (usb_set_interface(usb_dev, 0, 1) != 0) { log("can't set alt interface.\n"); return -EIO; } usb_init_urb(&dev->ep1_in_urb); usb_init_urb(&dev->midi_out_urb); usb_fill_bulk_urb(&dev->ep1_in_urb, usb_dev, usb_rcvbulkpipe(usb_dev, 0x1), dev->ep1_in_buf, EP1_BUFSIZE, usb_ep1_command_reply_dispatch, dev); usb_fill_bulk_urb(&dev->midi_out_urb, usb_dev, usb_sndbulkpipe(usb_dev, 0x1), dev->midi_out_buf, EP1_BUFSIZE, snd_usb_caiaq_midi_output_done, dev); init_waitqueue_head(&dev->ep1_wait_queue); init_waitqueue_head(&dev->prepare_wait_queue); if (usb_submit_urb(&dev->ep1_in_urb, GFP_KERNEL) != 0) return -EIO; err = snd_usb_caiaq_send_command(dev, EP1_CMD_GET_DEVICE_INFO, NULL, 0); if (err) return err; if (!wait_event_timeout(dev->ep1_wait_queue, dev->spec_received, HZ)) return -ENODEV; usb_string(usb_dev, usb_dev->descriptor.iManufacturer, dev->vendor_name, CAIAQ_USB_STR_LEN); usb_string(usb_dev, usb_dev->descriptor.iProduct, dev->product_name, CAIAQ_USB_STR_LEN); strlcpy(card->driver, MODNAME, sizeof(card->driver)); strlcpy(card->shortname, dev->product_name, sizeof(card->shortname)); strlcpy(card->mixername, dev->product_name, sizeof(card->mixername)); /* if the id was not passed as module option, fill it with a shortened * version of the product string which does not contain any * whitespaces */ if (*card->id == '\0') { char id[sizeof(card->id)]; memset(id, 0, sizeof(id)); for (c = card->shortname, len = 0; *c && len < sizeof(card->id); c++) if (*c != ' ') id[len++] = *c; snd_card_set_id(card, id); } usb_make_path(usb_dev, usbpath, sizeof(usbpath)); snprintf(card->longname, sizeof(card->longname), "%s %s (%s)", dev->vendor_name, dev->product_name, usbpath); setup_card(dev); return 0; }