vserver 1.9.5.x5
[linux-2.6.git] / drivers / usb / input / ati_remote.c
index 61a42bd..3f54144 100644 (file)
 #define ATI_REMOTE_VENDOR_ID   0x0bc7
 #define ATI_REMOTE_PRODUCT_ID  0x004
 #define LOLA_REMOTE_PRODUCT_ID         0x002
+#define MEDION_REMOTE_PRODUCT_ID 0x006
 
 #define DRIVER_VERSION                 "2.2.1"
 #define DRIVER_AUTHOR           "Torrey Hoffman <thoffman@arnor.net>"
@@ -126,6 +127,7 @@ MODULE_PARM_DESC(debug, "Enable extra debug messages and information");
 static struct usb_device_id ati_remote_table[] = {
        { USB_DEVICE(ATI_REMOTE_VENDOR_ID, ATI_REMOTE_PRODUCT_ID) },
        { USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA_REMOTE_PRODUCT_ID) },
+       { USB_DEVICE(ATI_REMOTE_VENDOR_ID, MEDION_REMOTE_PRODUCT_ID) },
        {}      /* Terminating entry */
 };
 
@@ -418,13 +420,14 @@ static int ati_remote_sendpacket(struct ati_remote *ati_remote, u16 cmd, unsigne
 
        while (timeout && (ati_remote->out_urb->status == -EINPROGRESS) 
               && !(ati_remote->send_flags & SEND_FLAG_COMPLETE)) {
+               set_current_state(TASK_INTERRUPTIBLE);
                timeout = schedule_timeout(timeout);
                rmb();
        }
 
        set_current_state(TASK_RUNNING);
        remove_wait_queue(&ati_remote->wait, &wait);
-       usb_unlink_urb(ati_remote->out_urb);
+       usb_kill_urb(ati_remote->out_urb);
        
        return retval;
 }
@@ -624,10 +627,10 @@ static void ati_remote_delete(struct ati_remote *ati_remote)
        if (!ati_remote) return;
 
        if (ati_remote->irq_urb)
-               usb_unlink_urb(ati_remote->irq_urb);
+               usb_kill_urb(ati_remote->irq_urb);
 
        if (ati_remote->out_urb)
-               usb_unlink_urb(ati_remote->out_urb);
+               usb_kill_urb(ati_remote->out_urb);
 
        input_unregister_device(&ati_remote->idev);
 
@@ -669,9 +672,9 @@ static void ati_remote_input_init(struct ati_remote *ati_remote)
        idev->phys = ati_remote->phys;
        
        idev->id.bustype = BUS_USB;             
-       idev->id.vendor = ati_remote->udev->descriptor.idVendor;
-       idev->id.product = ati_remote->udev->descriptor.idProduct;
-       idev->id.version = ati_remote->udev->descriptor.bcdDevice;
+       idev->id.vendor = le16_to_cpu(ati_remote->udev->descriptor.idVendor);
+       idev->id.product = le16_to_cpu(ati_remote->udev->descriptor.idProduct);
+       idev->id.version = le16_to_cpu(ati_remote->udev->descriptor.bcdDevice);
 }
 
 static int ati_remote_initialize(struct ati_remote *ati_remote)
@@ -726,12 +729,6 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
        char path[64];
        char *buf = NULL;
 
-       /* See if the offered device matches what we can accept */
-       if ((udev->descriptor.idVendor != ATI_REMOTE_VENDOR_ID) ||
-               ( (udev->descriptor.idProduct != ATI_REMOTE_PRODUCT_ID) &&
-                 (udev->descriptor.idProduct != LOLA_REMOTE_PRODUCT_ID) ))
-               return -ENODEV;
-
        /* Allocate and clear an ati_remote struct */
        if (!(ati_remote = kmalloc(sizeof (struct ati_remote), GFP_KERNEL)))
                return -ENOMEM;
@@ -759,7 +756,7 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
                retval = -ENODEV;
                goto error;
        }
-       if (ati_remote->endpoint_in->wMaxPacketSize == 0) {
+       if (le16_to_cpu(ati_remote->endpoint_in->wMaxPacketSize) == 0) {
                err("%s: endpoint_in message size==0? \n", __FUNCTION__);
                retval = -ENODEV;
                goto error;
@@ -799,8 +796,8 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
 
        if (!strlen(ati_remote->name))
                sprintf(ati_remote->name, DRIVER_DESC "(%04x,%04x)",
-                       ati_remote->udev->descriptor.idVendor
-                       ati_remote->udev->descriptor.idProduct);
+                       le16_to_cpu(ati_remote->udev->descriptor.idVendor)
+                       le16_to_cpu(ati_remote->udev->descriptor.idProduct));
 
        /* Device Hardware Initialization - fills in ati_remote->idev from udev. */
        retval = ati_remote_initialize(ati_remote);