#include <linux/time.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
+#include <linux/completion.h>
 #include "host_interface.h"
 #include "coreconfigurator.h"
 #include "wilc_wlan.h"
                return -EFAULT;
        }
 
-       up(&hif_drv->sem_inactive_time);
+       complete(&hif_drv->comp_inactive_time);
 
        return result;
 }
        if (result)
                netdev_err(vif->ndev, "Failed to send get host ch param\n");
 
-       down(&hif_drv->sem_inactive_time);
+       wait_for_completion(&hif_drv->comp_inactive_time);
 
        *pu32InactiveTime = inactive_time;
 
        sema_init(&hif_drv->sem_test_key_block, 0);
        sema_init(&hif_drv->sem_test_disconn_block, 0);
        sema_init(&hif_drv->sem_get_rssi, 0);
-       sema_init(&hif_drv->sem_inactive_time, 0);
+       init_completion(&hif_drv->comp_inactive_time);
 
        if (clients_count == 0) {
                result = wilc_mq_create(&hif_msg_q);
 
        struct semaphore sem_test_key_block;
        struct semaphore sem_test_disconn_block;
        struct semaphore sem_get_rssi;
-       struct semaphore sem_inactive_time;
+       struct completion comp_inactive_time;
 
        struct timer_list scan_timer;
        struct timer_list connect_timer;