};
 
 static atomic_t count_displays = ATOMIC_INIT(0);
-static struct workqueue_struct *wq;
 
 static void appledisplay_complete(struct urb *urb)
 {
        case ACD_BTN_BRIGHT_UP:
        case ACD_BTN_BRIGHT_DOWN:
                pdata->button_pressed = 1;
-               queue_delayed_work(wq, &pdata->work, 0);
+               schedule_delayed_work(&pdata->work, 0);
                break;
        case ACD_BTN_NONE:
        default:
 
        if (pdata) {
                usb_kill_urb(pdata->urb);
-               cancel_delayed_work(&pdata->work);
+               cancel_delayed_work_sync(&pdata->work);
                backlight_device_unregister(pdata->bd);
                usb_free_coherent(pdata->udev, ACD_URB_BUFFER_LEN,
                        pdata->urbdata, pdata->urb->transfer_dma);
 
 static int __init appledisplay_init(void)
 {
-       wq = create_singlethread_workqueue("appledisplay");
-       if (!wq) {
-               printk(KERN_ERR "appledisplay: Could not create work queue\n");
-               return -ENOMEM;
-       }
-
        return usb_register(&appledisplay_driver);
 }
 
 static void __exit appledisplay_exit(void)
 {
-       flush_workqueue(wq);
-       destroy_workqueue(wq);
        usb_deregister(&appledisplay_driver);
 }