static struct completion hif_wait_response;
 static struct mutex hif_deinit_lock;
 static struct timer_list periodic_rssi;
+static struct wilc_vif *periodic_rssi_vif;
 
 u8 wilc_multicast_mac_addr_list[WILC_MULTICAST_TABLE_SIZE][ETH_ALEN];
 
 ERRORHANDLER:
        {
                P2P_LISTEN_STATE = 1;
-               hif_drv->remain_on_ch_timer.data = (unsigned long)vif;
+               hif_drv->remain_on_ch_timer_vif = vif;
                mod_timer(&hif_drv->remain_on_ch_timer,
                          jiffies +
                          msecs_to_jiffies(pstrHostIfRemainOnChan->duration));
        return result;
 }
 
-static void ListenTimerCB(unsigned long arg)
+static void ListenTimerCB(struct timer_list *t)
 {
+       struct host_if_drv *hif_drv = from_timer(hif_drv, t,
+                                                     remain_on_ch_timer);
+       struct wilc_vif *vif = hif_drv->remain_on_ch_timer_vif;
        s32 result = 0;
        struct host_if_msg msg;
-       struct wilc_vif *vif = (struct wilc_vif *)arg;
 
        del_timer(&vif->hif_drv->remain_on_ch_timer);
 
        complete(&hif_thread_comp);
 }
 
-static void TimerCB_Scan(unsigned long arg)
+static void TimerCB_Scan(struct timer_list *t)
 {
-       struct wilc_vif *vif = (struct wilc_vif *)arg;
+       struct host_if_drv *hif_drv = from_timer(hif_drv, t, scan_timer);
+       struct wilc_vif *vif = hif_drv->scan_timer_vif;
        struct host_if_msg msg;
 
        memset(&msg, 0, sizeof(struct host_if_msg));
        wilc_enqueue_cmd(&msg);
 }
 
-static void TimerCB_Connect(unsigned long arg)
+static void TimerCB_Connect(struct timer_list *t)
 {
-       struct wilc_vif *vif = (struct wilc_vif *)arg;
+       struct host_if_drv *hif_drv = from_timer(hif_drv, t,
+                                                     connect_timer);
+       struct wilc_vif *vif = hif_drv->connect_timer_vif;
        struct host_if_msg msg;
 
        memset(&msg, 0, sizeof(struct host_if_msg));
                return -EFAULT;
        }
 
-       hif_drv->connect_timer.data = (unsigned long)vif;
+       hif_drv->connect_timer_vif = vif;
        mod_timer(&hif_drv->connect_timer,
                  jiffies + msecs_to_jiffies(HOST_IF_CONNECT_TIMEOUT));
 
                return -EINVAL;
        }
 
-       hif_drv->scan_timer.data = (unsigned long)vif;
+       hif_drv->scan_timer_vif = vif;
        mod_timer(&hif_drv->scan_timer,
                  jiffies + msecs_to_jiffies(HOST_IF_SCAN_TIMEOUT));
 
        return wilc_enqueue_cmd(&msg);
 }
 
-static void GetPeriodicRSSI(unsigned long arg)
+static void GetPeriodicRSSI(struct timer_list *unused)
 {
-       struct wilc_vif *vif = (struct wilc_vif *)arg;
+       struct wilc_vif *vif = periodic_rssi_vif;
 
        if (!vif->hif_drv) {
                netdev_err(vif->ndev, "Driver handler is NULL\n");
        if (vif->hif_drv->hif_state == HOST_IF_CONNECTED)
                wilc_get_statistics(vif, &vif->wilc->dummy_statistics);
 
-       periodic_rssi.data = (unsigned long)vif;
        mod_timer(&periodic_rssi, jiffies + msecs_to_jiffies(5000));
 }
 
                        goto _fail_;
                }
 
-               setup_timer(&periodic_rssi, GetPeriodicRSSI,
-                           (unsigned long)vif);
+               periodic_rssi_vif = vif;
+               timer_setup(&periodic_rssi, GetPeriodicRSSI, 0);
                mod_timer(&periodic_rssi, jiffies + msecs_to_jiffies(5000));
        }
 
-       setup_timer(&hif_drv->scan_timer, TimerCB_Scan, 0);
-       setup_timer(&hif_drv->connect_timer, TimerCB_Connect, 0);
-       setup_timer(&hif_drv->remain_on_ch_timer, ListenTimerCB, 0);
+       timer_setup(&hif_drv->scan_timer, TimerCB_Scan, 0);
+       timer_setup(&hif_drv->connect_timer, TimerCB_Connect, 0);
+       timer_setup(&hif_drv->remain_on_ch_timer, ListenTimerCB, 0);
 
        mutex_init(&hif_drv->cfg_values_lock);
        mutex_lock(&hif_drv->cfg_values_lock);