struct speedtch_params params; /* set in probe, constant afterwards */
 
-       struct delayed_work status_checker;
+       struct timer_list status_check_timer;
+       struct work_struct status_check_work;
 
        unsigned char last_status;
 
 {
        struct speedtch_instance_data *instance =
                container_of(work, struct speedtch_instance_data,
-                            status_checker.work);
+                            status_check_work);
        struct usbatm_data *usbatm = instance->usbatm;
        struct atm_dev *atm_dev = usbatm->atm_dev;
        unsigned char *buf = instance->scratch_buffer;
 {
        struct speedtch_instance_data *instance = (void *)data;
 
-       schedule_delayed_work(&instance->status_checker, 0);
+       schedule_work(&instance->status_check_work);
 
        /* The following check is racy, but the race is harmless */
        if (instance->poll_delay < MAX_POLL_DELAY)
-               mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(instance->poll_delay));
+               mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(instance->poll_delay));
        else
                atm_warn(instance->usbatm, "Too many failures - disabling line status polling\n");
 }
        if (int_urb) {
                ret = usb_submit_urb(int_urb, GFP_ATOMIC);
                if (!ret)
-                       schedule_delayed_work(&instance->status_checker, 0);
+                       schedule_work(&instance->status_check_work);
                else {
                        atm_dbg(instance->usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);
                        mod_timer(&instance->resubmit_timer, jiffies + msecs_to_jiffies(RESUBMIT_DELAY));
        }
 
        if ((count == 6) && !memcmp(up_int, instance->int_data, 6)) {
-               del_timer(&instance->status_checker.timer);
+               del_timer(&instance->status_check_timer);
                atm_info(usbatm, "DSL line goes up\n");
        } else if ((count == 6) && !memcmp(down_int, instance->int_data, 6)) {
                atm_info(usbatm, "DSL line goes down\n");
 
        if ((int_urb = instance->int_urb)) {
                ret = usb_submit_urb(int_urb, GFP_ATOMIC);
-               schedule_delayed_work(&instance->status_checker, 0);
+               schedule_work(&instance->status_check_work);
                if (ret < 0) {
                        atm_dbg(usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);
                        goto fail;
        }
 
        /* Start status polling */
-       mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(1000));
+       mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(1000));
 
        return 0;
 }
 
        atm_dbg(usbatm, "%s entered\n", __func__);
 
-       del_timer_sync(&instance->status_checker.timer);
+       del_timer_sync(&instance->status_check_timer);
 
        /*
         * Since resubmit_timer and int_urb can schedule themselves and
 
        usbatm->flags |= (use_isoc ? UDSL_USE_ISOC : 0);
 
-       INIT_DELAYED_WORK(&instance->status_checker, speedtch_check_status);
+       INIT_WORK(&instance->status_check_work, speedtch_check_status);
+       init_timer(&instance->status_check_timer);
 
-       instance->status_checker.timer.function = speedtch_status_poll;
-       instance->status_checker.timer.data = (unsigned long)instance;
+       instance->status_check_timer.function = speedtch_status_poll;
+       instance->status_check_timer.data = (unsigned long)instance;
        instance->last_status = 0xff;
        instance->poll_delay = MIN_POLL_DELAY;