Merge remote-tracking branch 'usb/usb-next'
[deliverable/linux.git] / drivers / usb / misc / lvstest.c
index 86b4e4b2ab9a608912118e38a294b7d7f0d8f8a7..77176511658f3328f830ecdbd056f072a6c84f8a 100644 (file)
@@ -34,8 +34,6 @@ struct lvs_rh {
        struct usb_hub_descriptor descriptor;
        /* urb for polling interrupt pipe */
        struct urb *urb;
-       /* LVS RH work queue */
-       struct workqueue_struct *rh_queue;
        /* LVH RH work */
        struct work_struct      rh_work;
        /* RH port status */
@@ -247,10 +245,8 @@ static ssize_t get_dev_desc_store(struct device *dev,
        int ret;
 
        descriptor = kmalloc(sizeof(*descriptor), GFP_KERNEL);
-       if (!descriptor) {
-               dev_err(dev, "failed to allocate descriptor memory\n");
+       if (!descriptor)
                return -ENOMEM;
-       }
 
        udev = create_lvs_device(intf);
        if (!udev) {
@@ -355,7 +351,7 @@ static void lvs_rh_irq(struct urb *urb)
 {
        struct lvs_rh *lvs = urb->context;
 
-       queue_work(lvs->rh_queue, &lvs->rh_work);
+       schedule_work(&lvs->rh_work);
 }
 
 static int lvs_rh_probe(struct usb_interface *intf,
@@ -397,24 +393,15 @@ static int lvs_rh_probe(struct usb_interface *intf,
 
        /* submit urb to poll interrupt endpoint */
        lvs->urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!lvs->urb) {
-               dev_err(&intf->dev, "couldn't allocate lvs urb\n");
+       if (!lvs->urb)
                return -ENOMEM;
-       }
-
-       lvs->rh_queue = create_singlethread_workqueue("lvs_rh_queue");
-       if (!lvs->rh_queue) {
-               dev_err(&intf->dev, "couldn't create workqueue\n");
-               ret = -ENOMEM;
-               goto free_urb;
-       }
 
        INIT_WORK(&lvs->rh_work, lvs_rh_work);
 
        ret = sysfs_create_group(&intf->dev.kobj, &lvs_attr_group);
        if (ret < 0) {
                dev_err(&intf->dev, "Failed to create sysfs node %d\n", ret);
-               goto destroy_queue;
+               goto free_urb;
        }
 
        pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
@@ -432,8 +419,6 @@ static int lvs_rh_probe(struct usb_interface *intf,
 
 sysfs_remove:
        sysfs_remove_group(&intf->dev.kobj, &lvs_attr_group);
-destroy_queue:
-       destroy_workqueue(lvs->rh_queue);
 free_urb:
        usb_free_urb(lvs->urb);
        return ret;
@@ -444,7 +429,7 @@ static void lvs_rh_disconnect(struct usb_interface *intf)
        struct lvs_rh *lvs = usb_get_intfdata(intf);
 
        sysfs_remove_group(&intf->dev.kobj, &lvs_attr_group);
-       destroy_workqueue(lvs->rh_queue);
+       flush_work(&lvs->rh_work);
        usb_free_urb(lvs->urb);
 }
 
This page took 0.026346 seconds and 5 git commands to generate.