#include "gdm_mux.h"
 
-static struct workqueue_struct *mux_rx_wq;
-
 static u16 packet_type[TTY_MAX_COUNT] = {0xF011, 0xF010};
 
 #define USB_DEVICE_CDC_DATA(vid, pid) \
                r->len = r->urb->actual_length;
                spin_lock_irqsave(&rx->to_host_lock, flags);
                list_add_tail(&r->to_host_list, &rx->to_host_list);
-               queue_work(mux_rx_wq, &mux_dev->work_rx.work);
+               schedule_work(&mux_dev->work_rx.work);
                spin_unlock_irqrestore(&rx->to_host_lock, flags);
        }
 }
        mux_dev = tty_dev->priv_dev;
        rx = &mux_dev->rx;
 
+       cancel_work_sync(&mux_dev->work_rx.work);
+
        if (mux_dev->usb_state != PM_NORMAL) {
                dev_err(intf->usb_dev, "usb suspend - invalid state\n");
                return -1;
 
 static int __init gdm_usb_mux_init(void)
 {
-
-       mux_rx_wq = create_workqueue("mux_rx_wq");
-       if (!mux_rx_wq) {
-               pr_err("work queue create fail\n");
-               return -1;
-       }
-
        register_lte_tty_driver();
 
        return usb_register(&gdm_mux_driver);
 {
        unregister_lte_tty_driver();
 
-       if (mux_rx_wq) {
-               flush_workqueue(mux_rx_wq);
-               destroy_workqueue(mux_rx_wq);
-       }
-
        usb_deregister(&gdm_mux_driver);
 }