struct regulator       *vbus_draw;
        int                     vbus_draw_enabled;
        unsigned                mA;
-       struct work_struct      work;
+       struct delayed_work     work;
 };
 
 
 static void gpio_vbus_work(struct work_struct *work)
 {
        struct gpio_vbus_data *gpio_vbus =
-               container_of(work, struct gpio_vbus_data, work);
+               container_of(work, struct gpio_vbus_data, work.work);
        struct gpio_vbus_mach_info *pdata = gpio_vbus->dev->platform_data;
        int gpio, status;
 
                otg->gadget ? otg->gadget->name : "none");
 
        if (otg->gadget)
-               schedule_work(&gpio_vbus->work);
+               schedule_delayed_work(&gpio_vbus->work, msecs_to_jiffies(100));
 
        return IRQ_HANDLED;
 }
 
        ATOMIC_INIT_NOTIFIER_HEAD(&gpio_vbus->phy.notifier);
 
-       INIT_WORK(&gpio_vbus->work, gpio_vbus_work);
+       INIT_DELAYED_WORK(&gpio_vbus->work, gpio_vbus_work);
 
        gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
        if (IS_ERR(gpio_vbus->vbus_draw)) {