]> err.no Git - linux-2.6/blobdiff - drivers/usb/misc/phidgetkit.c
Merge branch 'linus' into core/generic-dma-coherent
[linux-2.6] / drivers / usb / misc / phidgetkit.c
index 78e419904abf361d3463abc625d29fe6c7b32ae3..4cfa25b0f44e5620bc45b4447eee62737bf523f2 100644 (file)
@@ -81,8 +81,8 @@ struct interfacekit {
        unsigned char *data;
        dma_addr_t data_dma;
 
-       struct work_struct do_notify;
-       struct work_struct do_resubmit;
+       struct delayed_work do_notify;
+       struct delayed_work do_resubmit;
        unsigned long input_events;
        unsigned long sensor_events;
 };
@@ -113,7 +113,7 @@ static int set_outputs(struct interfacekit *kit)
 
        buffer = kzalloc(4, GFP_KERNEL);
        if (!buffer) {
-               dev_err(&kit->udev->dev, "%s - out of memory\n", __FUNCTION__);
+               dev_err(&kit->udev->dev, "%s - out of memory\n", __func__);
                return -ENOMEM;
        }
        buffer[0] = (u8)kit->outputs;
@@ -146,7 +146,7 @@ static int change_string(struct interfacekit *kit, const char *display, unsigned
        buffer = kmalloc(8, GFP_KERNEL);
        form_buffer = kmalloc(30, GFP_KERNEL);
        if ((!buffer) || (!form_buffer)) {
-               dev_err(&kit->udev->dev, "%s - out of memory\n", __FUNCTION__);
+               dev_err(&kit->udev->dev, "%s - out of memory\n", __func__);
                goto exit;
        }
 
@@ -216,7 +216,7 @@ static ssize_t set_backlight(struct device *dev, struct device_attribute *attr,
        
        buffer = kzalloc(8, GFP_KERNEL);
        if (!buffer) {
-               dev_err(&kit->udev->dev, "%s - out of memory\n", __FUNCTION__);
+               dev_err(&kit->udev->dev, "%s - out of memory\n", __func__);
                goto exit;
        }
 
@@ -300,14 +300,15 @@ out:
 
 static DEVICE_ATTR(lcd, S_IWUGO, NULL, enable_lcd_files);
 
-static void interfacekit_irq(struct urb *urb, struct pt_regs *regs)
+static void interfacekit_irq(struct urb *urb)
 {
        struct interfacekit *kit = urb->context;
        unsigned char *buffer = kit->data;
        int i, level, sensor;
-       int status;
+       int retval;
+       int status = urb->status;
 
-       switch (urb->status) {
+       switch (status) {
        case 0:                 /* success */
                break;
        case -ECONNRESET:       /* unlink */
@@ -374,19 +375,20 @@ static void interfacekit_irq(struct urb *urb, struct pt_regs *regs)
        }
 
        if (kit->input_events || kit->sensor_events)
-               schedule_work(&kit->do_notify);
+               schedule_delayed_work(&kit->do_notify, 0);
 
 resubmit:
-       status = usb_submit_urb(urb, SLAB_ATOMIC);
-       if (status)
-               err("can't resubmit intr, %s-%s/interfacekit0, status %d",
+       retval = usb_submit_urb(urb, GFP_ATOMIC);
+       if (retval)
+               err("can't resubmit intr, %s-%s/interfacekit0, retval %d",
                        kit->udev->bus->bus_name,
-                       kit->udev->devpath, status);
+                       kit->udev->devpath, retval);
 }
 
-static void do_notify(void *data)
+static void do_notify(struct work_struct *work)
 {
-       struct interfacekit *kit = data;
+       struct interfacekit *kit =
+               container_of(work, struct interfacekit, do_notify.work);
        int i;
        char sysfs_file[8];
 
@@ -405,9 +407,11 @@ static void do_notify(void *data)
        }
 }
 
-static void do_resubmit(void *data)
+static void do_resubmit(struct work_struct *work)
 {
-       set_outputs(data);
+       struct interfacekit *kit =
+               container_of(work, struct interfacekit, do_resubmit.work);
+       set_outputs(kit);
 }
 
 #define show_set_output(value)         \
@@ -551,7 +555,7 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
                return -ENODEV;
 
        endpoint = &interface->endpoint[0].desc;
-       if (!(endpoint->bEndpointAddress & 0x80)) 
+       if (!usb_endpoint_dir_in(endpoint))
                return -ENODEV;
        /*
         * bmAttributes
@@ -565,7 +569,7 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
 
        kit->dev_no = -1;
        kit->ifkit = ifkit;
-       kit->data = usb_buffer_alloc(dev, URB_INT_SIZE, SLAB_ATOMIC, &kit->data_dma);
+       kit->data = usb_buffer_alloc(dev, URB_INT_SIZE, GFP_ATOMIC, &kit->data_dma);
        if (!kit->data)
                goto out;
 
@@ -575,8 +579,8 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
 
        kit->udev = usb_get_dev(dev);
        kit->intf = intf;
-       INIT_WORK(&kit->do_notify, do_notify, kit);
-       INIT_WORK(&kit->do_resubmit, do_resubmit, kit);
+       INIT_DELAYED_WORK(&kit->do_notify, do_notify);
+       INIT_DELAYED_WORK(&kit->do_resubmit, do_resubmit);
        usb_fill_int_urb(kit->irq, kit->udev, pipe, kit->data,
                        maxp > URB_INT_SIZE ? URB_INT_SIZE : maxp,
                        interfacekit_irq, kit, endpoint->bInterval);
@@ -591,14 +595,14 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
         } while(value);
         kit->dev_no = bit;
 
-        kit->dev = device_create(phidget_class, &kit->udev->dev, 0,
-                               "interfacekit%d", kit->dev_no);
+       kit->dev = device_create_drvdata(phidget_class, &kit->udev->dev,
+                                       MKDEV(0, 0), kit,
+                                       "interfacekit%d", kit->dev_no);
         if (IS_ERR(kit->dev)) {
                 rc = PTR_ERR(kit->dev);
                 kit->dev = NULL;
                 goto out;
         }
-       dev_set_drvdata(kit->dev, kit);
 
        if (usb_submit_urb(kit->irq, GFP_KERNEL)) {
                rc = -EIO;
@@ -650,8 +654,7 @@ out2:
                device_remove_file(kit->dev, &dev_output_attrs[i]);
 out:
        if (kit) {
-               if (kit->irq)
-                       usb_free_urb(kit->irq);
+               usb_free_urb(kit->irq);
                if (kit->data)
                        usb_buffer_free(dev, URB_INT_SIZE, kit->data, kit->data_dma);
                if (kit->dev)