Commit 75ce07d4 authored by Tony Cho's avatar Tony Cho Committed by Greg Kroah-Hartman

staging: wilc1000: introduce struct wilc_sdio for sdio data

This patch introduces struct wilc_sdio for sdio driver data. The wilc_sdio is
allocated and set as driver data when the sdio is probed and deallocated when
the sdio is removed.
Signed-off-by: default avatarTony Cho <tony.cho@atmel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b46d6882
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
#define MAX_SPEED (6 * 1000000) /* Max 50M */ #define MAX_SPEED (6 * 1000000) /* Max 50M */
#endif #endif
struct wilc_sdio {
struct sdio_func *func;
struct wilc *wilc;
};
struct sdio_func *local_sdio_func; struct sdio_func *local_sdio_func;
extern int wilc_netdev_init(void); extern int wilc_netdev_init(void);
...@@ -112,14 +116,22 @@ int linux_sdio_cmd53(sdio_cmd53_t *cmd) ...@@ -112,14 +116,22 @@ int linux_sdio_cmd53(sdio_cmd53_t *cmd)
static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id) static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id)
{ {
struct wilc_sdio *wl_sdio;
PRINT_D(INIT_DBG, "probe function\n"); PRINT_D(INIT_DBG, "probe function\n");
wl_sdio = kzalloc(sizeof(struct wilc_sdio), GFP_KERNEL);
if (!wl_sdio)
return -ENOMEM;
PRINT_D(INIT_DBG, "Initializing netdev\n"); PRINT_D(INIT_DBG, "Initializing netdev\n");
local_sdio_func = func; local_sdio_func = func;
if (wilc_netdev_init()) { if (wilc_netdev_init()) {
PRINT_ER("Couldn't initialize netdev\n"); PRINT_ER("Couldn't initialize netdev\n");
kfree(wl_sdio);
return -1; return -1;
} }
wl_sdio->func = func;
sdio_set_drvdata(func, wl_sdio);
printk("Driver Initializing success\n"); printk("Driver Initializing success\n");
return 0; return 0;
...@@ -127,7 +139,11 @@ static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id ...@@ -127,7 +139,11 @@ static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id
static void linux_sdio_remove(struct sdio_func *func) static void linux_sdio_remove(struct sdio_func *func)
{ {
struct wilc_sdio *wl_sdio;
wl_sdio = sdio_get_drvdata(func);
wl_wlan_cleanup(); wl_wlan_cleanup();
kfree(wl_sdio);
} }
struct sdio_driver wilc_bus = { struct sdio_driver wilc_bus = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment