static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo) { struct brcmf_bus *bus = NULL; struct brcmf_usbdev *bus_pub = NULL; struct device *dev = devinfo->dev; int ret; brcmf_dbg(USB, "Enter\n"); bus_pub = brcmf_usb_attach(devinfo, BRCMF_USB_NRXQ, BRCMF_USB_NTXQ); if (!bus_pub) return -ENODEV; bus = kzalloc(sizeof(struct brcmf_bus), GFP_ATOMIC); if (!bus) { ret = -ENOMEM; goto fail; } bus->dev = dev; bus_pub->bus = bus; bus->bus_priv.usb = bus_pub; dev_set_drvdata(dev, bus); bus->ops = &brcmf_usb_bus_ops; bus->proto_type = BRCMF_PROTO_BCDC; bus->always_use_fws_queue = true; #ifdef CONFIG_PM bus->wowl_supported = true; #endif if (!brcmf_usb_dlneeded(devinfo)) { ret = brcmf_usb_bus_setup(devinfo); if (ret) goto fail; /* we are done */ mutex_unlock(&devinfo->dev_init_lock); return 0; } bus->chip = bus_pub->devid; bus->chiprev = bus_pub->chiprev; /* request firmware here */ ret = brcmf_fw_get_firmwares(dev, 0, brcmf_usb_get_fwname(devinfo), NULL, brcmf_usb_probe_phase2); if (ret) { brcmf_err("firmware request failed: %d\n", ret); goto fail; } return 0; fail: /* Release resources in reverse order */ kfree(bus); brcmf_usb_detach(devinfo); return ret; }
static int brcmf_usb_probe_cb(struct device *dev, const char *desc, u32 bustype, u32 hdrlen) { struct brcmf_bus *bus = NULL; struct brcmf_usbdev *bus_pub = NULL; int ret; bus_pub = brcmf_usb_attach(BRCMF_USB_NRXQ, BRCMF_USB_NTXQ, dev); if (!bus_pub) { ret = -ENODEV; goto fail; } bus = kzalloc(sizeof(struct brcmf_bus), GFP_ATOMIC); if (!bus) { ret = -ENOMEM; goto fail; } bus_pub->bus = bus; bus->brcmf_bus_txdata = brcmf_usb_tx; bus->brcmf_bus_init = brcmf_usb_up; bus->brcmf_bus_stop = brcmf_usb_down; bus->brcmf_bus_txctl = brcmf_usb_tx_ctlpkt; bus->brcmf_bus_rxctl = brcmf_usb_rx_ctlpkt; bus->type = bustype; bus->bus_priv.usb = bus_pub; dev_set_drvdata(dev, bus); /* Attach to the common driver interface */ ret = brcmf_attach(hdrlen, dev); if (ret) { brcmf_dbg(ERROR, "dhd_attach failed\n"); goto fail; } ret = brcmf_bus_start(dev); if (ret == -ENOLINK) { brcmf_dbg(ERROR, "dongle is not responding\n"); brcmf_detach(dev); goto fail; } return 0; fail: /* Release resources in reverse order */ if (bus_pub) brcmf_usb_detach(bus_pub); kfree(bus); return ret; }
static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo) { struct brcmf_bus *bus = NULL; struct brcmf_usbdev *bus_pub = NULL; struct device *dev = devinfo->dev; struct brcmf_fw_request *fwreq; int ret; brcmf_dbg(USB, "Enter\n"); bus_pub = brcmf_usb_attach(devinfo, BRCMF_USB_NRXQ, BRCMF_USB_NTXQ); if (!bus_pub) return -ENODEV; bus = kzalloc(sizeof(struct brcmf_bus), GFP_ATOMIC); if (!bus) { ret = -ENOMEM; goto fail; } bus->dev = dev; bus_pub->bus = bus; bus->bus_priv.usb = bus_pub; dev_set_drvdata(dev, bus); bus->ops = &brcmf_usb_bus_ops; bus->proto_type = BRCMF_PROTO_BCDC; bus->always_use_fws_queue = true; #ifdef CONFIG_PM bus->wowl_supported = true; #endif devinfo->settings = brcmf_get_module_param(bus->dev, BRCMF_BUSTYPE_USB, bus_pub->devid, bus_pub->chiprev); if (!devinfo->settings) { ret = -ENOMEM; goto fail; } if (!brcmf_usb_dlneeded(devinfo)) { ret = brcmf_attach(devinfo->dev, devinfo->settings); if (ret) goto fail; /* we are done */ complete(&devinfo->dev_init_done); return 0; } bus->chip = bus_pub->devid; bus->chiprev = bus_pub->chiprev; fwreq = brcmf_usb_prepare_fw_request(devinfo); if (!fwreq) { ret = -ENOMEM; goto fail; } /* request firmware here */ ret = brcmf_fw_get_firmwares(dev, fwreq, brcmf_usb_probe_phase2); if (ret) { brcmf_err("firmware request failed: %d\n", ret); kfree(fwreq); goto fail; } return 0; fail: /* Release resources in reverse order */ kfree(bus); brcmf_usb_detach(devinfo); return ret; }