*/
 struct brcmf_bus_ops {
        int (*preinit)(struct device *dev);
-       int (*init)(struct device *dev);
        void (*stop)(struct device *dev);
        int (*txdata)(struct device *dev, struct sk_buff *skb);
        int (*txctl)(struct device *dev, unsigned char *msg, uint len);
        return bus->ops->preinit(bus->dev);
 }
 
-static inline int brcmf_bus_init(struct brcmf_bus *bus)
-{
-       return bus->ops->init(bus->dev);
-}
-
 static inline void brcmf_bus_stop(struct brcmf_bus *bus)
 {
        bus->ops->stop(bus->dev);
 
 
        brcmf_dbg(TRACE, "\n");
 
-       /* Bring up the bus */
-       ret = brcmf_bus_init(bus_if);
-       if (ret != 0) {
-               brcmf_err("brcmf_sdbrcm_bus_init failed %d\n", ret);
-               return ret;
-       }
-
        /* add primary networking interface */
        ifp = brcmf_add_if(drvr, 0, 0, "wlan%d", NULL);
        if (IS_ERR(ifp))
 
 static struct brcmf_bus_ops brcmf_sdio_bus_ops = {
        .stop = brcmf_sdio_bus_stop,
        .preinit = brcmf_sdio_bus_preinit,
-       .init = brcmf_sdio_bus_init,
        .txdata = brcmf_sdio_bus_txdata,
        .txctl = brcmf_sdio_bus_txctl,
        .rxctl = brcmf_sdio_bus_rxctl,
        brcmf_sdio_debugfs_create(bus);
        brcmf_dbg(INFO, "completed!!\n");
 
+       ret = brcmf_sdio_bus_init(sdiodev->dev);
+       if (ret)
+               goto fail;
+
        /* if firmware path present try to download and bring up bus */
        ret = brcmf_bus_start(bus->sdiodev->dev);
        if (ret != 0) {
 
 
 static struct brcmf_bus_ops brcmf_usb_bus_ops = {
        .txdata = brcmf_usb_tx,
-       .init = brcmf_usb_up,
        .stop = brcmf_usb_down,
        .txctl = brcmf_usb_tx_ctlpkt,
        .rxctl = brcmf_usb_rx_ctlpkt,
                goto fail;
        }
 
+       ret = brcmf_usb_up(dev);
+       if (ret) {
+               brcmf_detach(dev);
+               goto fail;
+       }
+
        ret = brcmf_bus_start(dev);
        if (ret) {
                brcmf_err("dongle is not responding\n");