diff --git a/wilink_6_1/external_drivers/sdio/linux/SdioDrv.c b/wilink_6_1/external_drivers/sdio/linux/SdioDrv.c
index 1b8c424..348dabe 100644
--- a/wilink_6_1/external_drivers/sdio/linux/SdioDrv.c
+++ b/wilink_6_1/external_drivers/sdio/linux/SdioDrv.c
@@ -15,6 +15,7 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/version.h>
 #include <linux/moduleparam.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
@@ -22,15 +23,25 @@
 #include <linux/types.h>
 #include <linux/dma-mapping.h>
 #include <linux/platform_device.h>
-#include <mach/hardware.h>
 #include <linux/i2c/twl4030.h>
-#include <mach/board.h>
 #include <linux/errno.h>
 #include <linux/clk.h>
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+#include <plat/hardware.h>
+#include <plat/board.h>
+#include <plat/clock.h>
+#include <plat/dma.h>
+#include <plat/io.h>
+#include <plat/resource.h>
+#define IO_ADDRESS(pa)	OMAP2_L4_IO_ADDRESS(pa)
+#else
+#include <mach/hardware.h>
+#include <mach/board.h>
 #include <mach/clock.h>
 #include <mach/dma.h>
 #include <mach/io.h>
 #include <mach/resource.h>
+#endif
 typedef void *TI_HANDLE;
 #include "host_platform.h"
 #include "SdioDrvDbg.h"
@@ -230,6 +241,14 @@
 };
 static struct omap_hsmmc_regs hsmmc_ctx;
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+static struct platform_device dummy_pdev = {
+	.dev = {
+		.bus = &platform_bus_type,
+	},
+};
+#endif
+
 #define SDIO_DRIVER_NAME 			"TIWLAN_SDIO"
 
 module_param(g_sdio_debug_level, int, 0644);
@@ -1075,8 +1094,14 @@
         sdiodrv_dma_on = 1;
 
 	spin_lock_init(&g_drv.clk_lock);
-	
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+	dummy_pdev.id = TIWLAN_MMC_CONTROLLER;
+	dev_set_name(&dummy_pdev.dev, "mmci-omap-hs.%lu", TIWLAN_MMC_CONTROLLER);
+	g_drv.fclk = clk_get(&dummy_pdev.dev, "fck");
+#else
 	g_drv.fclk = clk_get(&pdev->dev, "mmchs_fck");
+#endif
 	if (IS_ERR(g_drv.fclk)) {
 		rc = PTR_ERR(g_drv.fclk);
 		PERR("clk_get(fclk) FAILED !!!\n");
@@ -1084,7 +1109,11 @@
 	}
 	sdiodrv_fclk_got = 1;
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+	g_drv.iclk = clk_get(&dummy_pdev.dev, "ick");
+#else
 	g_drv.iclk = clk_get(&pdev->dev, "mmchs_ick");
+#endif
 	if (IS_ERR(g_drv.iclk)) {
 		rc = PTR_ERR(g_drv.iclk);
 		PERR("clk_get(iclk) FAILED !!!\n");
diff --git a/wilink_6_1/platforms/hw/linux/host_platform.c b/wilink_6_1/platforms/hw/linux/host_platform.c
index aa02cee..2f95c6d 100644
--- a/wilink_6_1/platforms/hw/linux/host_platform.c
+++ b/wilink_6_1/platforms/hw/linux/host_platform.c
@@ -33,7 +33,6 @@
 #include "tidef.h"
 #include <linux/kernel.h>
 #include <asm/io.h>
-#include <mach/tc.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/wifi_tiwlan.h>
diff --git a/wilink_6_1/platforms/os/linux/src/WlanDrvIf.c b/wilink_6_1/platforms/os/linux/src/WlanDrvIf.c
index d32b31b..f05c218 100644
--- a/wilink_6_1/platforms/os/linux/src/WlanDrvIf.c
+++ b/wilink_6_1/platforms/os/linux/src/WlanDrvIf.c
@@ -90,6 +90,31 @@
 MODULE_DESCRIPTION("TI WLAN Embedded Station Driver");
 MODULE_LICENSE("GPL");
 
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+static int wlanDrvIf_Xmit(struct sk_buff *skb, struct net_device *dev);
+static int wlanDrvIf_XmitDummy(struct sk_buff *skb, struct net_device *dev);
+static struct net_device_stats *wlanDrvIf_NetGetStat(struct net_device *dev);
+int wlanDrvIf_Open(struct net_device *dev);
+int wlanDrvIf_Release(struct net_device *dev);
+
+static struct net_device_ops tiwlan_ops_pri = {
+	.ndo_open = wlanDrvIf_Open,
+	.ndo_stop = wlanDrvIf_Release,
+	.ndo_get_stats = wlanDrvIf_NetGetStat,
+	.ndo_do_ioctl = NULL,
+	.ndo_start_xmit = wlanDrvIf_Xmit,
+};
+
+static struct net_device_ops tiwlan_ops_dummy = {
+	.ndo_open = wlanDrvIf_Open,
+	.ndo_stop = wlanDrvIf_Release,
+	.ndo_get_stats = wlanDrvIf_NetGetStat,
+	.ndo_do_ioctl = NULL,
+	.ndo_start_xmit = wlanDrvIf_XmitDummy,
+};
+#endif
+
 /** 
  * \fn     wlanDrvIf_Xmit
  * \brief  Packets transmission
@@ -107,22 +132,22 @@
  */ 
 static int wlanDrvIf_Xmit (struct sk_buff *skb, struct net_device *dev)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
 	TTxCtrlBlk *  pPktCtrlBlk;
-    int status;
+	int status;
 
-    CL_TRACE_START_L1();
+	CL_TRACE_START_L1();
 
-    os_profile (drv, 0, 0);
+	os_profile (drv, 0, 0);
 	drv->stats.tx_packets++;
 	drv->stats.tx_bytes += skb->len;
 
 	/* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */
-    pPktCtrlBlk = TWD_txCtrlBlk_Alloc (drv->tCommon.hTWD);
+	pPktCtrlBlk = TWD_txCtrlBlk_Alloc (drv->tCommon.hTWD);
 
-    pPktCtrlBlk->tTxDescriptor.startTime    = os_timeStampMs(drv); /* remove use of skb->tstamp.off_usec */
-    pPktCtrlBlk->tTxDescriptor.length       = skb->len;
-    pPktCtrlBlk->tTxPktParams.pInputPkt     = skb;
+	pPktCtrlBlk->tTxDescriptor.startTime    = os_timeStampMs(drv); /* remove use of skb->tstamp.off_usec */
+	pPktCtrlBlk->tTxDescriptor.length       = skb->len;
+	pPktCtrlBlk->tTxPktParams.pInputPkt     = skb;
 
 	/* Point the first BDL buffer to the Ethernet header, and the second buffer to the rest of the packet */
 	pPktCtrlBlk->tTxnStruct.aBuf[0] = skb->data;
@@ -131,19 +156,18 @@
 	pPktCtrlBlk->tTxnStruct.aLen[1] = (TI_UINT16)skb->len - ETHERNET_HDR_LEN;
 	pPktCtrlBlk->tTxnStruct.aLen[2] = 0;
 
-    /* Send the packet to the driver for transmission. */
-    status = txDataQ_InsertPacket (drv->tCommon.hTxDataQ, pPktCtrlBlk,(TI_UINT8)skb->priority);
+	/* Send the packet to the driver for transmission. */
+	status = txDataQ_InsertPacket (drv->tCommon.hTxDataQ, pPktCtrlBlk,(TI_UINT8)skb->priority);
 
 	/* If failed (queue full or driver not running), drop the packet. */
-    if (status != TI_OK)
-    {
-        drv->stats.tx_errors++;
-    }
-    os_profile (drv, 1, 0);
+	if (status != TI_OK) {
+		drv->stats.tx_errors++;
+	}
+	os_profile (drv, 1, 0);
 
-    CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "TX", "");
+	CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "TX", "");
 
-    return 0;
+	return 0;
 }
 /*--------------------------------------------------------------------------------------*/
 /** 
@@ -183,8 +207,8 @@
  */ 
 static int wlanDrvIf_XmitDummy (struct sk_buff *skb, struct net_device *dev)
 {
-    /* Just return error. The driver is not running (network stack frees the packet) */
-    return -ENODEV;
+	/* Just return error. The driver is not running (network stack frees the packet) */
+	return -ENODEV;
 }
 
 
@@ -201,10 +225,10 @@
  */ 
 static struct net_device_stats *wlanDrvIf_NetGetStat (struct net_device *dev)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
-    ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_NetGetStat()\n");
-    
-    return &drv->stats;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+	ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_NetGetStat()\n");
+
+	return &drv->stats;
 }
 
 
@@ -223,18 +247,21 @@
  */ 
 void wlanDrvIf_UpdateDriverState (TI_HANDLE hOs, EDriverSteadyState eDriverState)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
 
-    ti_dprintf(TIWLAN_LOG_OTHER, "wlanDrvIf_UpdateDriverState(): State = %d\n", eDriverState);
+	ti_dprintf(TIWLAN_LOG_OTHER, "wlanDrvIf_UpdateDriverState(): State = %d\n", eDriverState);
 
-    /* Save the new state */
-    drv->tCommon.eDriverState = eDriverState;
+	/* Save the new state */
+	drv->tCommon.eDriverState = eDriverState;
 
-    /* If the new state is not RUNNING, replace the Tx handler to a dummy one. */
-    if (eDriverState != DRV_STATE_RUNNING) 
-    {
-       drv->netdev->hard_start_xmit = wlanDrvIf_XmitDummy;
-    }
+	/* If the new state is not RUNNING, replace the Tx handler to a dummy one. */
+	if (eDriverState != DRV_STATE_RUNNING) {
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
+		drv->netdev->hard_start_xmit = wlanDrvIf_XmitDummy;
+#else
+		drv->netdev->netdev_ops = &tiwlan_ops_dummy;
+#endif
+	}
 }
 
 
@@ -254,11 +281,11 @@
  */ 
 irqreturn_t wlanDrvIf_HandleInterrupt (int irq, void *hDrv, struct pt_regs *cpu_regs)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
 
-    TWD_InterruptRequest (drv->tCommon.hTWD);
+	TWD_InterruptRequest (drv->tCommon.hTWD);
 
-    return IRQ_HANDLED;
+	return IRQ_HANDLED;
 }
 
 
@@ -277,10 +304,10 @@
 #ifdef PRIODIC_INTERRUPT
 static void wlanDrvIf_PollIrqHandler (TI_HANDLE parm)
 {
-   TWlanDrvIfObj *drv = (TWlanDrvIfObj *)parm;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)parm;
 
-   wlanDrvIf_HandleInterrupt (0, drv, NULL);
-   os_periodicIntrTimerStart (drv);
+	wlanDrvIf_HandleInterrupt (0, drv, NULL);
+	os_periodicIntrTimerStart (drv);
 }
 #endif
 
@@ -575,10 +602,10 @@
  */ 
 void wlanDrvIf_SetMacAddress (TI_HANDLE hOs, TI_UINT8 *pMacAddr)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
 
-    /* Copy STA MAC address to the network interface structure */
-    MAC_COPY (drv->netdev->dev_addr, pMacAddr);
+	/* Copy STA MAC address to the network interface structure */
+	MAC_COPY (drv->netdev->dev_addr, pMacAddr);
 }
 
 
@@ -597,55 +624,57 @@
  */ 
 int wlanDrvIf_Start (struct net_device *dev)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
 
-    ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Start()\n");
-    printk("%s\n", __func__);
-    if (!drv->tCommon.hDrvMain)
-    {
-        ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Start() Driver not created!\n");
-        return -ENODEV;
-    }
+	ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Start()\n");
+	printk("%s\n", __func__);
+	if (!drv->tCommon.hDrvMain) {
+		ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Start() Driver not created!\n");
+		return -ENODEV;
+	}
 
-    /*
-     *  Insert Start command in DrvMain action queue, request driver scheduling 
-     *      and wait for action completion (all init process).
-     */
-    os_wake_lock_timeout_enable(drv);
-    drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_START);
-    return 0;
+	/*
+	 *  Insert Start command in DrvMain action queue, request driver scheduling 
+	 *      and wait for action completion (all init process).
+	 */
+	os_wake_lock_timeout_enable(drv);
+	drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_START);
+	return 0;
 }
 
 int wlanDrvIf_Open (struct net_device *dev)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
 
-    ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Open()\n");
-    printk("%s\n", __func__);
-    if (!drv->tCommon.hDrvMain)
-    {
-        ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Open() Driver not created!\n");
-        return -ENODEV;
-    }
+	ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Open()\n");
+	printk("%s\n", __func__);
+	if (!drv->tCommon.hDrvMain) {
+		ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Open() Driver not created!\n");
+		return -ENODEV;
+	}
 
-    if (drv->tCommon.eDriverState != DRV_STATE_RUNNING) {
-        wlanDrvIf_Start(dev);
-    }
+	if (drv->tCommon.eDriverState != DRV_STATE_RUNNING) {
+		wlanDrvIf_Start(dev);
+	}
 
-    /*
-     *  Finalize network interface setup
-     */
-    drv->netdev->hard_start_xmit = wlanDrvIf_Xmit;
-    drv->netdev->addr_len = MAC_ADDR_LEN;
-    netif_start_queue (dev);
+	/*
+	 *  Finalize network interface setup
+	 */
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
+	drv->netdev->hard_start_xmit = wlanDrvIf_Xmit;
+#else
+	drv->netdev->netdev_ops = &tiwlan_ops_pri;
+#endif
+	drv->netdev->addr_len = MAC_ADDR_LEN;
+	netif_start_queue (dev);
 
-    /* register 3430 PM hooks in our SDIO driver */
+	/* register 3430 PM hooks in our SDIO driver */
 #ifdef TI_CONFIG_PM_HOOKS
 #ifndef CONFIG_MMC_EMBEDDED_SDIO
-    sdioDrv_register_pm(wlanDrvIf_pm_resume, wlanDrvIf_pm_suspend);
+	sdioDrv_register_pm(wlanDrvIf_pm_resume, wlanDrvIf_pm_suspend);
 #endif
 #endif
-    return 0;
+	return 0;
 }
 
 /** 
@@ -663,43 +692,44 @@
  */ 
 int wlanDrvIf_Stop (struct net_device *dev)
 {
-    TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
 
-    ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Stop()\n");
-    printk("%s\n", __func__);
-    /* 
-     *  Insert Stop command in DrvMain action queue, request driver scheduling 
-     *      and wait for Stop process completion.
-     */
-    os_wake_lock_timeout_enable(drv);
-    drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_STOP);
-    return 0;
+	ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Stop()\n");
+	printk("%s\n", __func__);
+	/* 
+	 *  Insert Stop command in DrvMain action queue, request driver scheduling 
+	 *      and wait for Stop process completion.
+	 */
+	os_wake_lock_timeout_enable(drv);
+	drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_STOP);
+	return 0;
 }
 
 int wlanDrvIf_Release (struct net_device *dev)
 {
-    /* TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev); */
+	/* TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev); */
 
-    ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Release()\n");
-    printk("%s\n", __func__);
-    /* Disable network interface queue */
-    netif_stop_queue (dev);
-    return 0;
+	ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Release()\n");
+	printk("%s\n", __func__);
+	/* Disable network interface queue */
+	netif_stop_queue (dev);
+	return 0;
 }
 
 /* 3430 PM hooks */
 #ifdef TI_CONFIG_PM_HOOKS
 static int wlanDrvIf_pm_resume(void)
 {
-    return(wlanDrvIf_Start(pDrvStaticHandle->netdev));
+	return(wlanDrvIf_Start(pDrvStaticHandle->netdev));
 }
 
 static int wlanDrvIf_pm_suspend(void)
 {
-    return(wlanDrvIf_Stop(pDrvStaticHandle->netdev));
+	return(wlanDrvIf_Stop(pDrvStaticHandle->netdev));
 }
 #endif
 
+
 /** 
  * \fn     wlanDrvIf_SetupNetif
  * \brief  Setup driver network interface
@@ -714,55 +744,56 @@
  */ 
 static int wlanDrvIf_SetupNetif (TWlanDrvIfObj *drv)
 {
-   struct net_device *dev;
-   int res;
+	struct net_device *dev;
+	int res;
 
-   /* Allocate network interface structure for the driver */
-   dev = alloc_etherdev (0);
-   if (dev == NULL)
-   {
-      ti_dprintf (TIWLAN_LOG_ERROR, "alloc_etherdev() failed\n");
-      return -ENOMEM;
-   }
+	/* Allocate network interface structure for the driver */
+	dev = alloc_etherdev (0);
+	if (dev == NULL) {
+		ti_dprintf (TIWLAN_LOG_ERROR, "alloc_etherdev() failed\n");
+		return -ENOMEM;
+	}
 
-   /* Setup the network interface */
-   ether_setup (dev);
+	/* Setup the network interface */
+	ether_setup (dev);
 
+	NETDEV_SET_PRIVATE(dev,drv);
+	drv->netdev = dev;
+	strcpy (dev->name, TIWLAN_DRV_IF_NAME);
+	netif_carrier_off (dev);
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
 /* the following is required on at least BSP 23.8 and higher.
     Without it, the Open function of the driver will not be called
     when trying to 'ifconfig up' the interface */
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
-   dev->validate_addr = NULL;
+	dev->validate_addr = NULL;
 #endif
+	dev->open = wlanDrvIf_Open;
+	dev->stop = wlanDrvIf_Release;
+	dev->hard_start_xmit = wlanDrvIf_XmitDummy;
+	dev->get_stats = wlanDrvIf_NetGetStat;
+	dev->do_ioctl = NULL;
+#else
+	dev->netdev_ops = &tiwlan_ops_dummy;
+#endif
+	dev->tx_queue_len = 100;
 
-   NETDEV_SET_PRIVATE(dev,drv);
-   drv->netdev = dev;
-   strcpy (dev->name, TIWLAN_DRV_IF_NAME);
-   netif_carrier_off (dev);
-   dev->open = wlanDrvIf_Open;
-   dev->stop = wlanDrvIf_Release;
-   dev->hard_start_xmit = wlanDrvIf_XmitDummy;
-   dev->get_stats = wlanDrvIf_NetGetStat;
-   dev->tx_queue_len = 100;
-   dev->do_ioctl = NULL;
+	/* Initialize Wireless Extensions interface (WEXT) */
+	wlanDrvWext_Init (dev);
 
-   /* Initialize Wireless Extensions interface (WEXT) */
-   wlanDrvWext_Init (dev);
-
-   res = register_netdev (dev);
-   if (res != 0)
-   {
-      ti_dprintf (TIWLAN_LOG_ERROR, "register_netdev() failed : %d\n", res);
-      kfree (dev);
-      return res;
-   }
+	res = register_netdev (dev);
+	if (res != 0) {
+		ti_dprintf (TIWLAN_LOG_ERROR, "register_netdev() failed : %d\n", res);
+		kfree (dev);
+		return res;
+	}
 /*
 On the latest Kernel there is no more support for the below macro.
 */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
-   SET_MODULE_OWNER (dev);
+	SET_MODULE_OWNER (dev);
 #endif
-   return 0;
+	return 0;
 }
 
 /** 
@@ -780,8 +811,8 @@
  */ 
 void wlanDrvIf_CommandDone (TI_HANDLE hOs, void *pSignalObject, TI_UINT8 *CmdResp_p)
 {
-    /* Free semaphore */
-    os_SignalObjectSet (hOs, pSignalObject);
+	/* Free semaphore */
+	os_SignalObjectSet (hOs, pSignalObject);
 }
 
 
@@ -1025,24 +1056,24 @@
 
 static int __init wlanDrvIf_ModuleInit (void)
 {
-    printk(KERN_INFO "TIWLAN: driver init\n");
+	printk(KERN_INFO "TIWLAN: driver init\n");
 #ifndef TI_SDIO_STANDALONE
 #ifndef CONFIG_MMC_EMBEDDED_SDIO
-    sdioDrv_init(sdc_ctrl);
+	sdioDrv_init(sdc_ctrl);
 #endif
 #endif
-    return wlanDrvIf_Create ();
+	return wlanDrvIf_Create ();
 }
 
 static void __exit wlanDrvIf_ModuleExit (void)
 {
-    wlanDrvIf_Destroy (pDrvStaticHandle);
+	wlanDrvIf_Destroy (pDrvStaticHandle);
 #ifndef TI_SDIO_STANDALONE
 #ifndef CONFIG_MMC_EMBEDDED_SDIO
-    sdioDrv_exit();
+	sdioDrv_exit();
 #endif
 #endif
-    printk (KERN_INFO "TI WLAN: driver unloaded\n");
+	printk (KERN_INFO "TI WLAN: driver unloaded\n");
 }
 
 module_init (wlanDrvIf_ModuleInit);
