struct wilc_sdio {
        bool irq_gpio;
        u32 block_size;
+       bool isinit;
        int has_thrpt_enh3;
 };
 
        return 0;
 }
 
+static bool wilc_sdio_is_init(struct wilc *wilc)
+{
+       struct wilc_sdio *sdio_priv = wilc->bus_data;
+
+       return sdio_priv->isinit;
+}
+
 static int wilc_sdio_suspend(struct device *dev)
 {
        struct sdio_func *func = dev_to_sdio_func(dev);
 
 static int wilc_sdio_deinit(struct wilc *wilc)
 {
+       struct wilc_sdio *sdio_priv = wilc->bus_data;
+
+       sdio_priv->isinit = false;
        return 0;
 }
 
                         sdio_priv->has_thrpt_enh3);
        }
 
+       sdio_priv->isinit = true;
        return 0;
 }
 
        .enable_interrupt = wilc_sdio_enable_interrupt,
        .disable_interrupt = wilc_sdio_disable_interrupt,
        .hif_reset = wilc_sdio_reset,
+       .hif_is_init = wilc_sdio_is_init,
 };
 
 static int wilc_sdio_resume(struct device *dev)
 
        return result;
 }
 
+static bool wilc_spi_is_init(struct wilc *wilc)
+{
+       struct wilc_spi *spi_priv = wilc->bus_data;
+
+       return spi_priv->isinit;
+}
+
 static int wilc_spi_deinit(struct wilc *wilc)
 {
        struct wilc_spi *spi_priv = wilc->bus_data;
        .hif_block_rx_ext = wilc_spi_read,
        .hif_sync_ext = wilc_spi_sync_ext,
        .hif_reset = wilc_spi_reset,
+       .hif_is_init = wilc_spi_is_init,
 };
 
 
        wilc->quit = 0;
 
-       if (wilc->hif_func->hif_init(wilc, false)) {
-               ret = -EIO;
-               goto fail;
+       if (!wilc->hif_func->hif_is_init(wilc)) {
+               acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY);
+               ret = wilc->hif_func->hif_init(wilc, false);
+               release_bus(wilc, WILC_BUS_RELEASE_ONLY);
+               if (ret)
+                       goto fail;
        }
 
        if (!wilc->tx_buffer)
 
        int (*enable_interrupt)(struct wilc *nic);
        void (*disable_interrupt)(struct wilc *nic);
        int (*hif_reset)(struct wilc *wilc);
+       bool (*hif_is_init)(struct wilc *wilc);
 };
 
 #define WILC_MAX_CFG_FRAME_SIZE                1468