summaryrefslogtreecommitdiffstats
path: root/drivers/staging/wilc1000/linux_wlan_sdio.c
diff options
context:
space:
mode:
authorTony Cho2015-10-20 07:26:55 +0200
committerGreg Kroah-Hartman2015-10-25 02:14:35 +0100
commit75ce07d4a09e31a8d2c38bce95e92d12031e605a (patch)
treed13bdfa5ebe047509fe69260772314e78177eb9f /drivers/staging/wilc1000/linux_wlan_sdio.c
parentstaging: wilc1000: remove COMPLEMENT_BOOT (diff)
downloadkernel-qcow2-linux-75ce07d4a09e31a8d2c38bce95e92d12031e605a.tar.gz
kernel-qcow2-linux-75ce07d4a09e31a8d2c38bce95e92d12031e605a.tar.xz
kernel-qcow2-linux-75ce07d4a09e31a8d2c38bce95e92d12031e605a.zip
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: Tony Cho <tony.cho@atmel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/wilc1000/linux_wlan_sdio.c')
-rw-r--r--drivers/staging/wilc1000/linux_wlan_sdio.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/staging/wilc1000/linux_wlan_sdio.c b/drivers/staging/wilc1000/linux_wlan_sdio.c
index 1bd7f9b20ee7..9a45871e9093 100644
--- a/drivers/staging/wilc1000/linux_wlan_sdio.c
+++ b/drivers/staging/wilc1000/linux_wlan_sdio.c
@@ -21,6 +21,10 @@
#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);
@@ -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)
{
+ struct wilc_sdio *wl_sdio;
+
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");
local_sdio_func = func;
if (wilc_netdev_init()) {
PRINT_ER("Couldn't initialize netdev\n");
+ kfree(wl_sdio);
return -1;
}
+ wl_sdio->func = func;
+ sdio_set_drvdata(func, wl_sdio);
printk("Driver Initializing success\n");
return 0;
@@ -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)
{
+ struct wilc_sdio *wl_sdio;
+
+ wl_sdio = sdio_get_drvdata(func);
wl_wlan_cleanup();
+ kfree(wl_sdio);
}
struct sdio_driver wilc_bus = {