Staging: wilc1000: coreconfigurator: Remove trailing whitespace
[firefly-linux-kernel-4.4.55.git] / drivers / staging / wilc1000 / linux_wlan_sdio.c
index e5764fc19b6f21dde6a1dba8043d33ca508c02d6..4aff953a88f167880959ee12973bc11deecec734 100644 (file)
  #define MAX_SPEED (6 * 1000000) /* Max 50M */
 #endif
 
+struct wilc_sdio {
+       struct sdio_func *func;
+       struct wilc *wilc;
+};
 
 struct sdio_func *local_sdio_func;
-extern int wilc_netdev_init(void);
-extern void wilc_handle_isr(void);
 
 static unsigned int sdio_default_speed;
 
@@ -39,9 +41,13 @@ static const struct sdio_device_id wilc_sdio_ids[] = {
 
 static void wilc_sdio_interrupt(struct sdio_func *func)
 {
+       struct wilc_sdio *wl_sdio;
+
+       wl_sdio = sdio_get_drvdata(func);
+
 #ifndef WILC_SDIO_IRQ_GPIO
        sdio_release_host(func);
-       wilc_handle_isr();
+       wilc_handle_isr(wl_sdio->wilc);
        sdio_claim_host(func);
 #endif
 }
@@ -110,25 +116,26 @@ int linux_sdio_cmd53(sdio_cmd53_t *cmd)
        return 1;
 }
 
-volatile int probe; /* COMPLEMENT_BOOT */
 static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id)
 {
+       struct wilc_sdio *wl_sdio;
+       struct wilc *wilc;
+
        PRINT_D(INIT_DBG, "probe function\n");
+       wl_sdio = kzalloc(sizeof(struct wilc_sdio), GFP_KERNEL);
+       if (!wl_sdio)
+               return -ENOMEM;
 
-#ifdef COMPLEMENT_BOOT
-       if (local_sdio_func != NULL) {
-               local_sdio_func = func;
-               probe = 1;
-               PRINT_D(INIT_DBG, "local_sdio_func isn't NULL\n");
-               return 0;
-       }
-#endif
        PRINT_D(INIT_DBG, "Initializing netdev\n");
        local_sdio_func = func;
-       if (wilc_netdev_init()) {
+       if (wilc_netdev_init(&wilc)) {
                PRINT_ER("Couldn't initialize netdev\n");
+               kfree(wl_sdio);
                return -1;
        }
+       wl_sdio->func = func;
+       wl_sdio->wilc = wilc;
+       sdio_set_drvdata(func, wl_sdio);
 
        printk("Driver Initializing success\n");
        return 0;
@@ -136,7 +143,11 @@ static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id
 
 static void linux_sdio_remove(struct sdio_func *func)
 {
+       struct wilc_sdio *wl_sdio;
+
+       wl_sdio = sdio_get_drvdata(func);
        wl_wlan_cleanup();
+       kfree(wl_sdio);
 }
 
 struct sdio_driver wilc_bus = {