vserver 1.9.5.x5
[linux-2.6.git] / drivers / isdn / hisax / st5481_usb.c
index bf5f0f0..2369180 100644 (file)
@@ -143,9 +143,6 @@ static void usb_ctrl_complete(struct urb *urb, struct pt_regs *regs)
        if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) {
                /* Special case handling for pipe reset */
                le16_to_cpus(&ctrl_msg->dr.wIndex);
-               usb_endpoint_running(adapter->usb_dev,
-                                    ctrl_msg->dr.wIndex & ~USB_DIR_IN, 
-                                    (ctrl_msg->dr.wIndex & USB_DIR_IN) == 0);
 
                /* toggle is reset on clear */
                usb_settoggle(adapter->usb_dev, 
@@ -244,7 +241,8 @@ int st5481_setup_usb(struct st5481_adapter *adapter)
        struct usb_device *dev = adapter->usb_dev;
        struct st5481_ctrl *ctrl = &adapter->ctrl;
        struct st5481_intr *intr = &adapter->intr;
-       struct usb_host_interface *altsetting;
+       struct usb_interface *intf;
+       struct usb_host_interface *altsetting = NULL;
        struct usb_host_endpoint *endpoint;
        int status;
        struct urb *urb;
@@ -257,8 +255,11 @@ int st5481_setup_usb(struct st5481_adapter *adapter)
                return status;
        }
 
-       
-       altsetting = &(dev->config->interface[0]->altsetting[3]);       
+       intf = usb_ifnum_to_if(dev, 0);
+       if (intf)
+               altsetting = usb_altnum_to_altsetting(intf, 3);
+       if (!altsetting)
+               return -ENXIO;
 
        // Check if the config is sane
        if ( altsetting->desc.bNumEndpoints != 7 ) {
@@ -267,8 +268,8 @@ int st5481_setup_usb(struct st5481_adapter *adapter)
        }
 
        // The descriptor is wrong for some early samples of the ST5481 chip
-       altsetting->endpoint[3].desc.wMaxPacketSize = 32;
-       altsetting->endpoint[4].desc.wMaxPacketSize = 32;
+       altsetting->endpoint[3].desc.wMaxPacketSize = __constant_cpu_to_le16(32);
+       altsetting->endpoint[4].desc.wMaxPacketSize = __constant_cpu_to_le16(32);
 
        // Use alternative setting 3 on interface 0 to have 2B+D
        if ((status = usb_set_interface (dev, 0, 3)) < 0) {