*/
 int
 mwifiex_add_card(void *card, struct semaphore *sem,
-                struct mwifiex_if_ops *if_ops, u8 iface_type)
+                struct mwifiex_if_ops *if_ops, u8 iface_type,
+                struct device *dev)
 {
        struct mwifiex_adapter *adapter;
 
                goto err_init_sw;
        }
 
+       adapter->dev = dev;
        adapter->iface_type = iface_type;
        adapter->card_sem = sem;
 
 
 
 int mwifiex_init_shutdown_fw(struct mwifiex_private *priv,
                             u32 func_init_shutdown);
-int mwifiex_add_card(void *, struct semaphore *, struct mwifiex_if_ops *, u8);
+int mwifiex_add_card(void *card, struct semaphore *sem,
+                    struct mwifiex_if_ops *if_ops, u8 iface_type,
+                    struct device *dev);
 int mwifiex_remove_card(struct mwifiex_adapter *, struct semaphore *);
 
 void mwifiex_get_version(struct mwifiex_adapter *adapter, char *version,
 
        }
 
        if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
-                            MWIFIEX_PCIE)) {
+                            MWIFIEX_PCIE, &pdev->dev)) {
                pr_err("%s failed\n", __func__);
                return -1;
        }
 static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
 {
        struct pcie_service_card *card = adapter->card;
-       struct pci_dev *pdev = card->dev;
 
        /* save adapter pointer in card */
        card->adapter = adapter;
-       adapter->dev = &pdev->dev;
 
        if (mwifiex_pcie_request_irq(adapter))
                return -1;
 
        }
 
        ret = mwifiex_add_card(card, &add_remove_card_sem, &sdio_ops,
-                              MWIFIEX_SDIO);
+                              MWIFIEX_SDIO, &func->dev);
        if (ret) {
                dev_err(&func->dev, "add card failed\n");
                goto err_disable;
                return ret;
        }
 
-
-       adapter->dev = &func->dev;
-
        strcpy(adapter->fw_name, card->firmware);
        if (card->fw_dump_enh) {
                adapter->mem_type_mapping_tbl = generic_mem_type_map;
 
        usb_set_intfdata(intf, card);
 
        ret = mwifiex_add_card(card, &add_remove_card_sem, &usb_ops,
-                              MWIFIEX_USB);
+                              MWIFIEX_USB, &card->udev->dev);
        if (ret) {
                pr_err("%s: mwifiex_add_card failed: %d\n", __func__, ret);
                usb_reset_device(udev);
        struct usb_card_rec *card = (struct usb_card_rec *)adapter->card;
 
        card->adapter = adapter;
-       adapter->dev = &card->udev->dev;
 
        switch (le16_to_cpu(card->udev->descriptor.idProduct)) {
        case USB8997_PID_1: